二维数组越界异常本质是索引超出实际维度,解决关键在于提前预防和安全访问习惯:一要明确真实维度,避免硬编码假设;二对矩形数组需确保非空再取行列数;三对不规则数组须逐行检查长度;四访问前必须校验索引范围。

二维数组越界访问异常(如 Java 的 ArrayIndexOutOfBoundsException、Python 的 IndexError、C# 的 IndexOutOfRangeException)本质是索引超出了数组实际维度范围。解决的关键不在于“兜底捕获”,而在于**提前预防 + 安全访问习惯**。下面从四个实用角度说明怎么做。
明确数组真实维度,拒绝硬编码假设
尤其注意:行数和列数不能混用,不规则数组更要逐行确认。
- 矩形数组(每行等长):用
rows = arr.length(Java)、len(arr)(Python)得行数;用cols = arr[0].length(Java)或len(arr[0])(Python)得列数——但前提是arr非空且首行存在 - 不规则数组(如 Python 的
[[1,2], [3,4,5], [6]]):遍历时必须对每一行单独取长度,不能用len(arr[0])代表所有行的列数。访问arr[i][j]前,先检查j - 空数组或 null 引用要前置判断:Java 中
if (arr == null || arr.length == 0);Python 中if not arr:
一维索引转二维坐标时用对公式
当用单层循环遍历二维数组(如扁平化处理、比较相邻元素),错误的行列换算极易越界。
- 错误写法(常见陷阱):
row = i % rows、col = i - (i % cols)—— 这会算出非法列值,比如i=3, cols=3时得到col=3,而合法范围是0~2 - 正确公式(按行优先存储):
row = i / cols(整除)、col = i % cols。例如 3×4 数组中,i=5→row = 5/4 = 1,col = 5%4 = 1→ 对应[1][1] - 循环上限必须是
rows * cols,而非rows + cols或其他估算值
访问邻居时避免裸写八个方向
图像处理、扫雷、迷宫搜索等场景常需查上下左右及对角线共 8 个邻居,直接罗列 arr[i-1][j] 等表达式风险极高。
- 推荐做法:预定义偏移量列表,如
dirs = [(-1,-1), (-1,0), (-1,1), (0,-1), (0,1), (1,-1), (1,0), (1,1)] - 对每个
(dx, dy),先算新坐标ni = i + dx,nj = j + dy,再统一校验:0 (矩形)或 <code>0 (不规则) - 切片代替单点访问更安全:想取某行邻近三列?写
arr[i][max(0,j-1):min(len(arr[i]), j+2)]即可,越界自动截断
封装安全访问函数,减少重复判断
把边界检查逻辑抽成工具函数,既清晰又防遗漏。
- Python 示例:
def safe_get(grid, i, j, default=0): return grid[i][j] if 0 - Java 示例:
static int safeGet(int[][] grid, int i, int j, int def) { if (i >= 0 && i = 0 && j - 调用时直接
safe_get(grid, i-1, j),不用每次写一堆if,也方便后续扩展日志、计数或抛自定义异常

















