Java实现int二维数组转boolean二维数组时出现数组越界异常求解
问题根因与修复方案
直接报错原因
你出现数组越界的核心原因是相邻元素取值错误:
代码里sum+=inputArray[i][j]的写法是错误的,i、j是相对于当前中心元素(row,col)的偏移量,正确的取值应该是inputArray[row+i][col+j]。当遍历到i=-1时,你直接用i作为数组行下标访问,自然会抛出Index -1 out of bounds的异常。
其他隐藏逻辑错误
除了直接报错外,你的代码还有多处逻辑不符合需求:
- sum变量定义位置错误:sum定义在双层循环外,每次处理新的中心元素时不会重置,会累加之前所有单元格的相邻元素值,计算结果完全错误。
- 规则优先级错误:你先判断当前元素是否为3给output赋值,后续计算相邻和的时候又直接覆盖output的值,违反了「元素值为3直接赋值false」的第一优先级规则。
- 相邻和判断时机错误:你每累加一个相邻元素就判断sum是否≥15,不需要重复赋值,应该先算完全部相邻元素的总和,再统一判断。
修正后代码
int[][] inputArray = {{1,1,2,3,3}, {2,1,1,2,3}, {3,2,2,1,2}, {3,3,3,3,3},}; boolean[][] outputArray = new boolean[4][5]; for (int row=0; row<inputArray.length ; row++ ) { for (int col=0; col<inputArray[row].length ; col++ ) { // 规则1优先:当前元素为3直接设false,不需要算相邻和 if (inputArray[row][col] == 3) { outputArray[row][col] = false; continue; } int sum = 0; // 计算所有合法相邻元素的和 for (int i=-1; i<=1 ; i++ ) { for (int j=-1; j<=1 ; j++ ) { // 排除中心元素本身 + 边界校验 if((row+i>=0) && (row+i<inputArray.length) && (col+j>=0) && (col+j<inputArray[row].length) && !(i==0 && j==0)){ sum+=inputArray[row+i][col+j]; } } } // 规则2和3判断 outputArray[row][col] = sum < 15; } }
内容的提问来源于stack exchange,提问作者spasm
相关产品推荐
相关产品推荐

