PAYATHON 2026

Java 二维数组如何计算每行、每列及所有元素的和?

数据阿明

可以使用嵌套 for 循环遍历数组。每访问一个元素,就用 += 将它加到当前行的和、对应列的和以及总和中,无需额外调用求和方法。

示例数组中各行长度不同,内层循环需要使用 arr[i].length。按列下标累加时,第 5 列只有第三行的 13。

累加变量应该放在哪里?

代码需要保存三类结果:

  • rowSum:当前行的和。在外层循环内部定义,每开始一行就重新设为 0。
  • columnSums[j]:第 j 列的和。在循环外创建数组,保存各列的累加结果。
  • totalSum:所有元素的总和。在循环外定义,遍历时持续累加。

由于各行长度不同,可以先遍历各行,找出最大长度,再据此创建 columnSums。新建的 int[] 元素默认都是 0。

完整代码

public class arrays {
    public static void main(String[] args) {
        int[][] arr = {
            {1, 2, 3, 4},
            {5, 6, 7, 8},
            {9, 10, 11, 12, 13}
        };

        // Find the maximum number of columns.
        int maxColumns = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i].length > maxColumns) {
                maxColumns = arr[i].length;
            }
        }

        int[] columnSums = new int[maxColumns];
        int totalSum = 0;

        // Calculate row sums, column sums, and the total sum.
        for (int i = 0; i < arr.length; i++) {
            int rowSum = 0;

            for (int j = 0; j < arr[i].length; j++) {
                int value = arr[i][j];
                rowSum += value;
                columnSums[j] += value;
                totalSum += value;
            }

            System.out.println("Row [" + i + "] sum = " + rowSum);
        }

        for (int j = 0; j < columnSums.length; j++) {
            System.out.println(
                "Column [" + j + "] sum = " + columnSums[j]
            );
        }

        System.out.println("Total sum = " + totalSum);
    }
}

题目中数组的输出结果是:

Row [0] sum = 10
Row [1] sum = 26
Row [2] sum = 55
Column [0] sum = 15
Column [1] sum = 18
Column [2] sum = 21
Column [3] sum = 24
Column [4] sum = 13
Total sum = 91

为什么要使用当前行的长度?

Java 的二维数组可以理解为“存放数组的数组”。arr.length 是行数,arr[i].length 是第 i 行的元素数量,arr[i][j] 是该行中下标为 j 的元素。

如果内层循环使用 arr[0].length,就会漏掉第三行末尾的 13。如果所有行都按最大列数访问,访问前两行的 arr[i][4] 时会发生 ArrayIndexOutOfBoundsException。使用 j < arr[i].length 可以遍历每行实际存在的元素。

例如,遍历到 arr[1][2],也就是 7 时,以下三行代码分别更新第二行、第三列和整个数组的累计值:

rowSum += value;
columnSums[j] += value;
totalSum += value;

其中,rowSum += value 等价于 rowSum = rowSum + value。

使用时的注意事项

这份代码适用于数组本身及各行均非 null 的情况。空行的长度为 0,内层循环会直接跳过,该行的和为 0。如果某行可能为 null,需要先判断,再访问它的 length。

题目中的数值使用 int 足够。如果实际数据的累计值可能超出 int 范围,可以将 rowSum、totalSum 改成 long,并将列累加数组改为 long[]。

备注:内容仅供参考。