发布于2026-07-04 阅读(0)
扫一扫,手机访问
空指针和越界异常,几乎是每个Ja va开发者都会遇到的噩梦。尤其是在处理不规则二维数组时,稍不留神,代码就崩给你看。说白了,这类异常的根本原因就一条:在未确认子数组非空之前,就直接去访问它的.length或下标元素。
防御的关键不是堆砌判断语句,而是构建一条清晰的访问链条:先判行非空再取长,先保列范围再取值。就这么简单,但很多人就是忘。
任何一次arr[i][j]的访问,本质上都是两次引用操作:先找arr[i],再找arr[i][j]。只要中间某一环是null,程序当场就死给你看。
i在[0, arr.length)范围内,并且arr[i]本身不是null。j是否在[0, arr[i].length)范围内。这两层,少一个都不行。比如很多人只校验了i,却忘了arr[i]本身可能就是null;或者图省事,直接用arr[0].length代替arr[i].length,这都是在给自己埋坑。
当需要用到索引、修改元素值,或者逻辑本身比较复杂时,传统的双层for循环仍然是首选。它的优势在于,你可以把校验逻辑直接嵌入到循环结构中:
i < arr.length。if (arr[i] != null)把空行拦截掉。j < arr[i].length,千万别写成固定值,或者偷懒用第一行的长度。看看这个例子:
for (int i = 0; i < arr.length; i++) {
if (arr[i] != null) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
}
System.out.println();
}
逻辑清晰,每一步都踩实了,不容易出错。
for-each循环写起来确实简洁,但代价是失去了索引信息,而且对null行更敏感。使用时,必须显式处理空行,否则代码会直接抛NPE:
int[] row,写成int x的话,后面没法用。if (row != null),这是救命用的。示例代码长这样:
for (int[] row : arr) {
if (row != null) {
for (int x : row) {
System.out.print(x + " ");
}
}
System.out.println();
}
不规则数组没有统一的列数,所以按列遍历不能直接套用模板。得分两步走:
row.length。c,内层循环遍历每行r,访问前务必检查arr[r] != null && c < arr[r].length。这样做,既能保证“视觉列对齐”的输出效果,又不会因为某一行过短而意外中断或报错。这才是正确的做法。

售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8