矩形二维数组所有元素的和

3

我需要编写一个程序来将2D矩形数组中的所有元素相加,但实际答案应该是31,而不是33。 我做错了什么?

以下是代码:

public static int sum(int[][] array) {
        int[][] numArray = {

                                {3, -1,  4,  0},
                                {5,  9, -2,  6},
                                {5,  3,  7, -8}

                           };
        int sumOfRow = 0;
        for (int i = 0; i < numArray.length; i++) {
            sumOfRow += numArray[0][i];
            sumOfRow += numArray[1][i];
            sumOfRow += numArray[2][i];
        }

        System.out.println(sumOfRow);
        return sumOfRow;
}
3个回答

4

numArray.length是行数,而你的代码将其视为列数,因此忽略了每一行的最后一列。给定行中的列数为numArray[i].length

你应该使用嵌套循环:

for (int i = 0; i < numArray.length; i++) {
    for (int j = 0; j < numArray[i].length; j++) {
        sumOfRow += numArray[i][j];
    }
}

3

正如其他人已经提到的那样,numArray.length指的是行数(或者换句话说,由numArray引用中引用的其他数组的数量),而你的代码将它视为列数,并且因为行数比列数少,所以导致了意外结果。

不过,任何二维数组的第一个索引都应该是行索引,第二个索引应该表示列索引。Eran的答案说明了如何解决当前的问题。

然而,我想提供另一种更理想的Java-8+解决方案来计算您的二维数组元素的总和。

int sum = Arrays.stream(numArray)
                .flatMapToInt(Arrays::stream)
                .sum();

使用flatMapToInt方法更为理想,因为它非常适合这种类型的任务,只需调用sum终端操作即可得到所需结果。


2

numArray.length 是外层数组的长度,你应该使用 numArray[0].length 而不是 numArray.length ,这样才能得到预期的结果。

如果你在使用 Java 8,以下是解决方案:

int sum = Arrays.stream(numArray)
                .mapToInt(arr->IntStream.of(arr).sum()) // sum the inner array
                .sum(); // sum the outer array

1
@Pshemo 或者 .flatMapToInt(IntStream::of) 或者更好的方式是 --> .flatMapToInt(Arrays::stream) - Ousmane D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接