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

3x3网格指定位置邻居求和程序返回结果不符预期的问题排查求助

问题排查与解决方案

看起来你遇到的问题主要是循环范围错误和try-catch隐藏异常导致循环提前终止,再加上初始值设计逻辑不够严谨,咱们一步步拆解:

核心问题分析

  1. try-catch的致命干扰:
    当计算(0,0)位置的邻居时,循环初始i = row-1 = -1、j = col-1 = -1,第一次访问matrix[-1][-1]就会抛出ArrayIndexOutOfBoundsException。而你的catch块只是捕获异常却没有任何后续处理,这会直接终止整个try块的执行——也就是说,后面所有合法的循环(比如i=0,j=1、i=1,j=0这些有效位置)都根本没机会运行!这时候sum的结果大概率不是你调试时看到的11,而是初始值-1(因为异常抛出时,sum = sum + matrix[i][j]这行代码根本没执行完成)。

  2. 循环范围不完整:
    你当前的循环只遍历了row-1到row、col-1到col的范围,这只覆盖了当前位置的左上、左、上、自身这几个位置,完全漏掉了右侧和下方的邻居(比如i=1,j=0、i=1,j=1这些应该被计算的关键位置)。

  3. 初始值设计逻辑不合理:
    用sum = -1来抵消自身元素的思路很容易出错——一旦循环范围或判断逻辑有问题,这个初始值会直接干扰最终结果,而且代码可读性极差。

排查思路与修正方案

第一步:移除try-catch,暴露真实错误

try-catch在这里相当于“遮羞布”,它隐藏了数组越界的问题,让你无法知道循环为什么没按预期执行。先把try-catch删掉,运行程序时就能看到明确的异常信息,确认是非法索引导致的问题。

第二步:修正循环范围,主动判断索引合法性

正确的邻居遍历应该覆盖当前位置的上下左右及对角线,也就是i从row-1到row+1,j从col-1到col+1。同时,我们要主动判断索引是否在数组的有效范围内(避免越界),并且跳过当前位置本身(如果不需要把自身计入邻居和的话)。

修正后的代码如下:

int sumNeighbours(int[][] matrix, int row, int col) {
    int sum = 0;
    // 遍历当前位置周围3x3的所有位置
    for (int i = row - 1; i <= row + 1; i++) {
        for (int j = col - 1; j <= col + 1; j++) {
            // 跳过当前位置,同时跳过数组越界的位置
            if ((i == row && j == col) 
                || i < 0 || i >= matrix.length 
                || j < 0 || j >= matrix[0].length) {
                continue;
            }
            sum += matrix[i][j];
        }
    }
    return sum;
}

第三步:验证结果

对于你的3×3网格,调用sumNeighbours(matrix, 0, 0)时:

  • 会跳过所有越界的索引(i=-1或j=-1的情况),以及当前位置(0,0)
  • 只累加有效邻居:matrix[0][1](2)、matrix[1][0](4)、matrix[1][1](5)
  • 最终返回2+4+5=11,和你的预期一致,此时out.println(sumNeighbours(matrix, 0, 0) == 11);会返回true。

额外调试技巧

如果还是不确定问题出在哪,可以在循环内部添加打印语句,输出每次循环的i、j值以及当前的sum,这样就能清晰看到哪些元素被加进去了,哪些被跳过了:

// 在sum += matrix[i][j];之前添加
System.out.printf("Adding matrix[%d][%d] = %d, current sum: %d%n", i, j, matrix[i][j], sum);

内容的提问来源于stack exchange,提问作者Muguwaranojar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:59:09