Java:二维数组总计未完成

Java:二维数组总计未完成,java,multidimensional-array,sum,Java,Multidimensional Array,Sum,这是一个学校项目。它是将数组中的信息显示为管状格式,每行和每列的总计在右侧和底部。除了一行之外,它做所有的合计。我找不到问题出在哪里。有人能帮忙吗 import java.util.Scanner; //program uses class Scanner public class Ex6_20 { //method begins java application public static void main(String[] args)

这是一个学校项目。它是将数组中的信息显示为管状格式,每行和每列的总计在右侧和底部。除了一行之外,它做所有的合计。我找不到问题出在哪里。有人能帮忙吗

import java.util.Scanner; 
//program uses class Scanner

    public class Ex6_20
    {
      //method begins java application
      public static void main(String[] args)
      {
        //create Scanner to obtain imput
        Scanner input = new Scanner(System.in);

        int monthySales=0; //varible to hold mothly sales
        int productNum; //varible to hold product number
        int salesNum=0; //varible to hold saleperson number
        int totalSales=0; //varible to hold total sales
        int []totalProduct = {0,0,0,0,0};//build array to hold total product
        int []salesTotal = {0,0,0,0,0};//build array to hold total salesperson

        // Build array to hold sales information by salesperson and poduct
        int[][]sales = {{2000,1500,500,800,0},
                        {500,2200,600,1000,0},
                        {1000,2000,300,2100,0},
                        {2500,4000,400,3000,0},
                        {300,3200,500,2300,0},
                        {0,0,0,0}};

        //figure total by product
        for(int row =0; row < sales.length; row++)
        {
          for(int column = 0; column < sales[row].length; column++)
            totalProduct[column] += sales[row][column];
        }//end for

        //figure total by salesperson
        for(int column = 0; column < sales.length; column++)
        {
     for(int row = 0; row < sales[column].length; row++)
     salesTotal[row] += sales[column][row];
        }//end for

        //fill totals for product
        for(int i = 0; i < 5; i++)
        {
    sales[i][4] = totalProduct[i];
        }//end for

        //fill totals for salesperson
        for(int i = 0; i < 4; i++)
        {
    sales[5][i] = salesTotal[i];
        }//end for

     // print info from array in table format
     for(int row =0; row < sales.length; row++)
        {
          for(int column = 0; column < sales[row].length; column++)
          System.out.print(sales[row][column]+"\t");
         System.out.println();

        }//end for
      } //end main method
    } //end class
import java.util.Scanner;
//程序使用类扫描程序
公共类Ex6_20
{
//方法启动java应用程序
公共静态void main(字符串[]args)
{
//创建扫描仪以获取输入
扫描仪输入=新扫描仪(System.in);
int monthySales=0;//可用于保存月销售
int productNum;//用于保存产品编号的变量
int salesNum=0;//用于保存销售人员编号的变量
int totalSales=0;//用于保存总销售额的变量
int[]totalProduct={0,0,0,0};//构建数组以保存total product
int[]salesTotal={0,0,0,0};//构建数组以容纳total salesperson
//构建阵列以保存销售人员和poduct的销售信息
int[][]销售额={{20001500500800,0},
{500,2200,600,1000,0},
{1000,2000,300,2100,0},
{2500,4000,400,3000,0},
{300,3200,500,2300,0},
{0,0,0,0}};
//图按产品分列的总数
for(int行=0;行
有几个问题:

如果您在“figure total by salesperson”中交换变量名“row”和“column”,您会注意到您实际上在进行与“figure total by product”完全相同的计算,只是使用了误导性的变量名。(您使用列作为行索引,反之亦然。)到目前为止,totalProduct和salesTotal都包含相同的值,这是不对的

这是主要问题

此外,当您显示销售总额和产品总额时,它们实际上是交换的。我怀疑这是因为您的意思是每行的总积为totalProduct[row]+=。。。每列的总销售额为salesTotal[column]+=…,但可能只是交换了名称,行/列索引正常

实际上,我建议从sales数组中删除额外的sum字段,以便所有行都具有相同的列数,并从使用硬编码数组边界开始,以便在得到正确的sum之前更清楚地显示发生了什么。然后,一旦计算出正确的总数,你就可以回到过去,让它更普遍地发挥作用。否则,您可能会不断获得ArrayIndexOutOfBounds异常,但原因并不明显,我怀疑到目前为止您最终会得到这个解决方案

例如,您可以从这样一个非常简单的方法开始,然后返回,使其更加友好和通用,以便可以处理不同的数组大小:

    int[][] table = { { 1, 2, 3, 4, 5 }, { 2, 3, 4, 5, 6 }, { 3, 4, 5, 6, 7 } };

    int[] rowSums = new int[3];
    int[] colSums = new int[5];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            rowSums[i] += table[i][j];
            colSums[j] += table[i][j];
        }
    }

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            System.out.print(table[i][j]);
            System.out.print('\t');
        }
        System.out.println(rowSums[i]);
    }
    for (int j = 0; j < 5; j++) {
        System.out.print(colSums[j]);
        System.out.print('\t');
    }
    System.out.println();
int[]table={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7};
int[]行和=新的int[3];
int[]colSums=新的int[5];
对于(int i=0;i<3;i++){
对于(int j=0;j<5;j++){
行和[i]+=表[i][j];
colSums[j]+=表[i][j];
}
}
对于(int i=0;i<3;i++){
对于(int j=0;j<5;j++){
系统输出打印(表[i][j]);
系统输出打印('\t');
}
System.out.println(行和[i]);
}
对于(int j=0;j<5;j++){
系统输出打印(colSums[j]);
系统输出打印('\t');
}
System.out.println();

有几个问题:

如果您在“figure total by salesperson”中交换变量名“row”和“column”,您会注意到您实际上在进行与“figure total by product”完全相同的计算,只是使用了误导性的变量名。(您使用列作为行索引,反之亦然。)到目前为止,totalProduct和salesTotal都包含相同的值,这是不对的

这是主要问题

此外,当您显示销售总额和产品总额时,它们实际上是交换的。我怀疑这是因为您的意思是每行的总积为totalProduct[row]+=。。。每列的总销售额为salesTotal[column]+=…,但可能只是交换了名称,行/列索引正常

实际上,我建议从sales数组中删除额外的sum字段,以便所有行都具有相同的列数,并从使用硬编码数组边界开始,以便在得到正确的sum之前更清楚地显示发生了什么。然后,一旦计算出正确的总数,你就可以回到过去,让它更普遍地发挥作用。否则,您可能会不断获得ArrayIndexOutOfBounds异常,但原因并不明显,我怀疑到目前为止您最终会得到这个解决方案

例如,您可以从这样一个非常简单的方法开始,然后返回,使其更加友好和通用,以便可以处理不同的数组大小:

    int[][] table = { { 1, 2, 3, 4, 5 }, { 2, 3, 4, 5, 6 }, { 3, 4, 5, 6, 7 } };

    int[] rowSums = new int[3];
    int[] colSums = new int[5];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            rowSums[i] += table[i][j];
            colSums[j] += table[i][j];
        }
    }

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            System.out.print(table[i][j]);
            System.out.print('\t');
        }
        System.out.println(rowSums[i]);
    }
    for (int j = 0; j < 5; j++) {
        System.out.print(colSums[j]);
        System.out.print('\t');
    }
    System.out.println();
int[]table={{1,2,3,4,5},{2,3,4,5,6}{