You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非均匀行二维数组求最大列和的Java代码逻辑疑问

问题解答:Java非均匀二维数组的最大列和计算

核心结论

Java中的二维数组不需要是n×n的均匀结构,它本质是「数组的数组」——每一行都是一个独立的一维数组,长度可以自由设定,JVM不会自动为短行补全元素,也不会截断长行。

原代码的问题分析

你给出的Codecademy代码存在两个严重问题,仅适用于所有行长度完全一致的二维数组:

  1. 遗漏长行的额外列:外层循环以arr2D[0].length作为列数上限,若后续行有更长的长度,超出第一行长度的列会被完全忽略,比如你示例中的第4、5列。
  2. 数组越界风险:如果存在比第一行更短的行,当循环到超过该行长度的列索引时,访问arr2D[j][i]会直接抛出ArrayIndexOutOfBoundsException。

修正后的实现方案

要正确处理任意结构的二维数组,需要先确定数组的最大列数(即所有行中最长的那一行的长度),然后遍历每一列,对每一行判断当前列是否存在,不存在则按0计算贡献:

class LargestColumnSum {
    public static int largestColumn(int[][] arr2D) {
        if (arr2D == null || arr2D.length == 0) {
            return -1; // 处理空数组的边界情况
        }

        // 第一步:找到最大列数(最长行的长度)
        int maxColumns = 0;
        for (int[] row : arr2D) {
            if (row.length > maxColumns) {
                maxColumns = row.length;
            }
        }

        int largestColumn = 0;
        int largestSum = Integer.MIN_VALUE; // 初始化为最小整数,避免全负数的情况

        // 遍历每一列
        for (int i = 0; i < maxColumns; i++) {
            int columnSum = 0;
            // 遍历每一行,计算当前列的和
            for (int[] row : arr2D) {
                // 如果当前行长度大于列索引,就加对应元素,否则加0
                if (i < row.length) {
                    columnSum += row[i];
                }
                // 否则默认加0,无需额外操作
            }

            // 更新最大和及对应列索引
            if (columnSum > largestSum) {
                largestSum = columnSum;
                largestColumn = i;
            }
        }

        return largestColumn;
    }

    public static void main(String[] args) {
        int[][] values = {
                {17, 13, 19, 22},
                {12, 18, 25, 20},
                {15, 18, 21, 24},
                {19, 23, 23, 22},
                {18, 20, 21, 26, 1000, 500}
        };
        System.out.println(largestColumn(values)); // 输出4,对应第5列(索引从0开始)
    }
}

关键细节说明

  • 边界处理:增加了空数组的判断,避免空指针异常。
  • 初始值设定:将largestSum初始化为Integer.MIN_VALUE,确保即使所有列的和都是负数,也能正确找到最大值。
  • 列存在性判断:通过i < row.length判断当前行是否包含该列元素,避免数组越界。

内容的提问来源于stack exchange,提问作者codetechie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:50:28