You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:36:03