java二维数组行列求和需区分遍历方向:行求和固定i遍历j,列求和固定j遍历i;均需重置累加器并用对应长度数组存结果;须校验null、空数组及不规则形状;高频查询推荐构建二维前缀和。

Java 中对规则二维数组做行列求和,核心在于明确“行”与“列”的遍历方向差异,并避免常见逻辑陷阱。不是简单套循环,而是要让每一步都对应真实的数据结构意图。
行求和:固定行号,遍历所有列
对第 i 行求和,就要让列下标 j 从 0 走到 cols−1,把 array[i][j] 全部加起来。关键点有三个:
- 外层循环控制行索引 i(范围 0 到 rows−1)
- 每次进入新行前,必须重置累加器为 0,否则上一行的和会残留
- 若需保存结果,建议用 int[] rowSums = new int[rows] 存储,下标直接对应行号
列求和:固定列号,遍历所有行
对第 j 列求和,就要让行下标 i 从 0 走到 rows−1,把 array[i][j] 全部加起来。注意它和行求和是镜像关系:
- 外层循环控制列索引 j(范围 0 到 cols−1)
- 每次进入新列前,也要重置累加器,不能复用上一列的值
- 同样推荐用 int[] colSums = new int[cols] 保存结果,访问 colSums[2] 就是第三列总和
边界与健壮性处理不能跳过
实际代码跑在线上环境时,空数组、null 引用、不规则形状(如每行长度不同)都会导致崩溃。必须提前校验:
- 先检查 array == null || array.length == 0,直接返回或抛异常
- 若数组非空,取第一行长度作为列数基准:int cols = array[0].length;再逐行确认 array[i].length 是否一致
- 对不规则情况,列求和可按每行实际长度动态取值,避免越界
高频调用场景建议预计算前缀和
如果程序中频繁查询任意子矩阵和(比如 sumRegion(row1,col1,row2,col2)),每次都双重循环效率低。更优解是构建二维前缀和数组:
- 新建大小为 (rows+1) × (cols+1) 的 sumMatrix,首行首列留空作辅助
- 递推公式:sumMatrix[i+1][j+1] = sumMatrix[i][j+1] + sumMatrix[i+1][j] − sumMatrix[i][j] + array[i][j]
- 之后任意区域和只需四次查表加减:sumRegion = sumMatrix[r2+1][c2+1] − sumMatrix[r1][c2+1] − sumMatrix[r2+1][c1] + sumMatrix[r1][c1]
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











