查找二维数组的行总和并将其返回到数组

时间:2017-03-21 05:31:22

标签: java arrays

我试图完成AP CS FRQ问题。我编写了代码,但它没有用。我搞砸了哪里?

  

编写一个静态方法rowSums,用于计算给定二维中每行的总和   array并在一维数组中返回这些和。该方法有一个参数,一个二维   数组arr2D的int值。该数组按行主要顺序排列:arr2D [r] [c]是条目   在第r行和第c列。该方法返回一维数组,每行包含一个条目   arr2D使得每个条目是arr2D中相应行的总和。作为提醒,每排一个   二维数组是一维数组。

`   public static int[] rowSums(int[][] arr2D){
        int total2 = 0;
        int a[] = new int[arr2D.length];
        for(int x=0; x<arr2D.length; x++){
            for(int n=0; n<arr2D[x].length;n++){
                arr2D[x][n] = total2;
                a[x] = a[x] + total2;
            }
        }
        return a;
    }`

4 个答案:

答案 0 :(得分:0)

您的作业是向后的,您应该使用以下方法存储2D数组的每个元素:

total2 = arr2D[x][n];

不是这个:

arr2D[x][n] = total2;

完整代码:

for (int x=0; x < arr2D.length; x++) {
    for (int n=0; n < arr2D[x].length; n++) {
        total2 = arr2D[x][n];
        a[x] = a[x] + total2;
    }
}

答案 1 :(得分:0)

您需要在外循环中重置total2,并在内循环结束后设置值

    int a[] = new int[arr2D.length];
    for(int x=0; x<arr2D.length; x++){
        int total2 = 0;
        for(int n=0; n<arr2D[x].length;n++){
              total2 += arr2D [x][n];
        }
        a[x] = total2;
    }

如果total2不会被重复使用,可以缩短为

for (int x=0; x < arr2D.length; x++) {
    for (int n=0; n<arr2D[x].length; n++) {
        a[x] = a[x] + arr2D[x][n];
    }
}

答案 2 :(得分:0)

编写好的代码包括好的评论和好的变量名称选择。让我们首先开始逐行评论您的代码,这样您就可以更好地了解正在发生的事情:

    public static int[] rowSums(int[][] arr2D){

        // A variable which is always 0
        int total2 = 0;

        // The actual output:
        int a[] = new int[arr2D.length];

        // For each row..
        for(int x=0; x<arr2D.length; x++){

            // For each column..
            for(int n=0; n<arr2D[x].length;n++){

                // Put 0 into the 2D array (this line is backwards):
                arr2D[x][n] = total2;

                // Add the 'total' (always 0) into the current output
                a[x] = a[x] + total2;
            }
        }

        // Return the output
        return a;
    }

永远不会设置Total2

好的,所以希望你的一条线路向后更清晰(你有一些糟糕的变量命名选择)。更好的东西看起来更像是这样:

    public static int[] rowSums(int[][] arr2D){

        // The actual output:
        int totals[] = new int[arr2D.length];

        // For each row..
        for(int row=0; row<arr2D.length; row++){

            // For each column..
            for(int col=0; col<arr2D[row].length;col++){

                // Get the column value:
                int columnValue = arr2D[row][col];

                // Add the column amount into the total:
                totals[row] = totals[row] + columnValue;
            }
        }

        // Return the output
        return totals;
    }

由于变量现在更加清晰,我们可以删除多余的注释:

    public static int[] rowSums(int[][] arr2D){

        int totals[] = new int[arr2D.length];

        for(int row=0; row<arr2D.length; row++){
            for(int col=0; col<arr2D[row].length;col++){
                int columnValue = arr2D[row][col];
                totals[row] = totals[row] + columnValue;
            }
        }

        return totals;
    }

答案 3 :(得分:-1)

arr2D [x] [n] = total2; //你将0分配给arr2D [x] [n]

将其更改为total2 = arr2D [x] [n];

它会起作用!!