【问题标题】:Sum of all elements in Rectangular 2D array矩形二维数组中所有元素的总和
【发布时间】:2026-02-19 10:15:02
【问题描述】:

我应该编写一个程序来添加二维矩形数组中的所有元素,但答案应该是 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;
}

【问题讨论】:

    标签: java arrays 2d


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      正如其他人已经提到的,numArray.length 指的是行数(或者换句话说,numArray 中的引用所引用的其他数组的数量),并且您的代码将其视为列数和因为行数少于列数,所以您会得到意外的结果。

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

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

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

      它更理想,因为flatMapToInt 是此类工作的完美方法,只需调用sum 终端操作即可呈现您需要的结果。

      【讨论】:

        【解决方案3】:

        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
        

        【讨论】:

        • @Pshemo 或 .flatMapToInt(IntStream::of) 或更好 --> .flatMapToInt(Arrays::stream).