java不规则二维数组遍历的关键是访问前判空:按行遍历时外层判arr[i]!=null、内层用arr[i].length;按列遍历时需先求最大列宽再逐列验证,全程严防空指针。

Java 不规则二维数组遍历的关键不是“怎么写循环”,而是“在哪加判断”。每行长度不同、甚至某行为 null,硬套规则数组逻辑必然出错。核心就一条:**访问子数组前先判空,取长度或下标前先确认该行存在且够长。**
按行遍历:传统 for 循环最稳妥
需要索引、要修改元素、或逻辑稍复杂时,双层 for 是首选。它显式控制边界,不易漏判。
- 外层用
i 控制行范围,防止越界访问行 - 进入内层前必须加
if (arr[i] != null),避免对null行调用.length - 内层条件写
j ,绝不能用 <code>arr[0].length—— 后者在不规则结构中毫无意义
按行遍历:增强 for 更简洁但需小心
适合只读场景,代码更干净,但失去行列索引,对 null 更敏感。
- 外层类型必须是
int[] row : arr(不是int x : arr,后者编译失败) - 每轮必须先写
if (row != null),否则for (int x : row)会直接抛NullPointerException - 无法知道当前是第几行第几列,不适合需定位的逻辑
按列遍历:先算最大列宽再逐列检查
不规则数组没有统一列数,不能靠第一行长度。必须先扫一遍找最大列宽,再对每一列逐行验证。
- 第一步:遍历所有行,求最大列数
maxCols = Math.max(maxCols, row.length)(跳过null行) - 第二步:外层循环列号
c从0到maxCols - 1 - 第三步:内层循环每行
r,访问前严格判断arr[r] != null && c
避坑要点:变量复用和边界误判
很多异常不是逻辑错,而是变量管理不当。
- 别在外层声明循环变量(如
int r = 0),再在内外层反复赋值——内层跑完后r变成行数,外层条件再用它就崩 - 别默认
arr[0].length代表所有行长度,除非你已确认它是规则数组 - 每次打印或处理前,都应检查
arr != null和arr[i] != null,这是防空指针的最小成本
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











