LeetCode中Java循环触发数组越界异常的奇怪问题排查
数组越界异常原因分析与修复
核心问题:混淆了二维数组的行/列长度
你遇到的ArrayIndexOutOfBoundsException,本质是循环条件里错误混用了二维数组的行数和列数:
在预填充第一列的循环中:
for(int row = 1; row < grid[0].length; row ++){ if(grid[row][0] == 1){ grid[row][0] = 0; break; } grid[row][0] = 1; }
grid.length代表二维数组的总行数,即包含多少个一维数组元素grid[0].length代表第一行的总列数,即单个一维数组的元素个数
你的循环用grid[0].length作为行的遍历上限,当网格的列数大于行数时(比如1行2列的测试用例[[0,0]]),row会遍历到超过数组总行数的索引,此时访问grid[row][0]必然越界——因为数组只有grid.length行,最大行索引是grid.length-1。
修复方案
把循环条件里的grid[0].length替换为grid.length,确保行索引不会超过数组的总行数:
for(int row = 1; row < grid.length; row ++){ if(grid[row][0] == 1){ grid[row][0] = 0; break; } grid[row][0] = 1; }
顺带提醒:第一行的循环也有同样问题
你预填充第一行的循环也犯了相同的错误:
for(int col = 1; col < grid.length; col ++){ // ... }
这里应该把循环条件改为col < grid[0].length,否则当行数大于列数时,同样会触发列索引越界。
内容的提问来源于stack exchange,提问作者Ishtiaq Naqi
相关产品推荐
相关产品推荐

