二维数组合法索引范围需逐维验证:行索引i满足0≤i

明确二维数组的合法索引范围
Java中二维数组本质是“数组的数组”,每行长度可不一致。例如 int[][] matrix = {{1, 2}, {3, 4, 5}};,matrix.length 是行数(2),但 matrix[0].length 是2,matrix[1].length 是3。访问 matrix[i][j] 前,必须分别验证:
i ≥ 0 且 i
j ≥ 0 且 j
只检查总长度或假设所有行等长,是高频出错点。
用户输入场景下的安全校验流程
当行号、列号来自 Scanner 或 Web 表单时,不能直接代入访问。应按顺序完成三步:
- 用
try-catch捕获InputMismatchException,防止非数字输入导致程序中断 - 对读取的整数值做边界判断:确保
row和col都在各自维度有效范围内 - 校验通过后再访问元素;失败则提示具体错误,如“第3行不存在”或“第5列超出该行长度”
封装安全访问方法降低重复风险
避免在多处手写冗余条件判断。可定义工具方法统一处理:
public static Integer safeGet(int[][] grid, int row, int col) {
if (grid == null || row = grid.length) return null;
if (grid[row] == null || col = grid[row].length) return null;
return grid[row][col];
}
返回 null 或抛出自定义异常(如 ArrayInputMismatchException),让调用方聚焦业务逻辑,不分散处理越界细节。
借助集合类与现代工具减少原生数组使用
若业务允许,优先考虑更安全的替代方案:
- 用
List<list>></list>替代int[][],配合.size()和.get(i)显式表达意图 - 引入
Optional包装返回值,强制调用方处理空情况 - 单元测试中用
assertThrows(ArrayIndexOutOfBoundsException.class)主动验证边界行为 - 启用 IDE 的静态分析(如 IntelliJ 的 Array bounds inspection)或 SpotBugs 插件提前预警
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











