繁体   English   中英

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

[英]Sum of all elements in Rectangular 2D array

我应该制作一个程序来添加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;
}

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];
    }
}

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

正如其他人已经提到的那样, numArray.length指的是行数(或者换句话说,是numArray引用引用的其他数组的数量),并且您的代码将其视为列数,因为行数较少你可以获得不期望的结果。

然而,任何二维数组的第一个索引应该是行索引,第二个索引应该指示列索引。 Eran的回答表明如何解决您当前的问题。

但是,我只是想在Java-8 +中提供另一种更理想的解决方案来对二维数组的元素求和。

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

它更理想,因为flatMapToInt是这种类型作业的完美方法,只需调用sum终端操作就可以呈现所需的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM