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

Java扫雷程序无法统计右侧炸弹问题求助

扫雷邻雷计数问题排查与修复

我看到你在实现扫雷的邻雷计数逻辑时,遇到了右侧炸弹无法被统计的问题,咱们来一步步拆解问题并修复:

核心问题:边界判断依赖固定变量而非数组实际长度

你的代码里用btnAmt-1来判断数组边界,但如果background二维数组的实际行列数和btnAmt不一致(比如初始化时数组大小写错,或者btnAmt值被误改),就会导致边界判断错误——要么漏掉可统计的右侧方块,要么出现数组越界。

正确的做法是依赖数组自身的长度做边界判断,而不是固定的btnAmt变量:

  • x方向的边界用background.length - 1(总行数-1)
  • y方向的边界用background[x].length - 1(当前行的总列数-1)

额外漏洞:遗漏正下方炸弹的计数

仔细看你的代码,发现你漏掉了当前方块**正下方(x, y+1)**的炸弹判断,这会导致正下方的炸弹也无法被统计进去。

修正后的完整计数代码

// Count neighbouring mines
for(int x = 0; x < background.length; x++){
    for(int y = 0; y < background[x].length; y++){
        int nCount = 0;
        if(background[x][y] != MINE){
            // Up Left
            if((x > 0) && (y > 0) && (background[x-1][y-1] == MINE)){
                nCount++;
            }
            // Up
            if(y > 0 && background[x][y-1] == MINE){
                nCount++;
            }
            // Up Right
            if(x < background.length - 1 && y > 0 && background[x+1][y-1] == MINE){
                nCount++;
            }
            // Left
            if(x > 0 && background[x-1][y] == MINE){
                nCount++;
            }
            // Down Left
            if(x > 0 && y < background[x].length - 1 && background[x-1][y+1] == MINE){
                nCount++;
            }
            // Down
            if(y < background[x].length - 1 && background[x][y+1] == MINE){
                nCount++;
            }
            // Down Right
            if(x < background.length - 1 && y < background[x].length - 1 && background[x+1][y+1] == MINE){
                nCount++;
            }
            // Right
            if(x < background.length - 1 && background[x+1][y] == MINE){
                nCount++;
            }
            background[x][y] = nCount;
        }
    }
}

后续排查建议

如果修改后问题仍存在,可以检查以下几点:

  • 确认background数组的初始化逻辑,确保炸弹的MINE标记和计数判断中的MINE是同一个值(比如是否是同一个常量定义)
  • 验证btnAmt是否确实等于background数组的行列数,避免变量和实际数组大小不匹配
  • 可以打印background数组的初始状态和计数后的状态,对比某个右侧有炸弹的方块,看计数是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:08:02