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

Java扫雷程序嵌套for循环出现无限循环问题求助

解决你的Java扫雷程序无限循环问题

嘿,我一眼就揪出了导致无限循环的元凶——你的列循环里犯了个超容易手抖的小错误!

看你这段核心循环代码:

for(int c = 0; c <= (gameBoard[0].length - 1); r++){ //column

这里的循环增量写的是r++,但这明明是列循环啊!你应该用c++来让列变量逐步递增才对。

这个错误直接导致:

  • 列变量c永远停在初始值0,永远满足c <= 9的循环条件
  • 而行变量r却在每次列循环时不断被加1,完全不受控制
  • 最终整个嵌套循环变成了无限循环,一直打印“New Cell”和对应的“new item”

修正后的核心代码

把列循环的r++改成c++就行:

public static void assignNumbers(int[][] gameBoard) {
 for(int r = 0; r <= (gameBoard.length - 1); r++){ //row
  for(int c = 0; c <= (gameBoard[0].length - 1); c++){ //column 这里改了r++为c++
   System.out.print("New Cell ");
   for(int vR = r+1; vR > r-2; vR --){ //vR is visiting Row
    for(int vC = c+1; vC > c-2; vC --){ //vC is visiting Column
     System.out.print("new item ");
     if (isValid(vR, vC, gameBoard)){
      System.out.print("isMine? ");
      if (isMine(vR, vC, gameBoard)){
       gameBoard[r][c] += 1;
       System.out.print(" MINE ");
      } else {
       System.out.print(" NO ");
      }
     }
    }
   }
   System.out.println();
  }
 }
}

额外小提示(可选优化)

另外注意你的isValid方法里有个逻辑小问题:它会直接排除掉是地雷的单元格,但扫雷游戏中,我们统计相邻地雷时,其实不需要排除当前单元格(因为当前单元格如果是地雷,我们本来就不会给它赋值数字)。不过这个不影响循环问题,只是后续功能优化可以考虑的点。

修正后,你的程序就会正常遍历10×10棋盘的100个单元格,不会再无限循环啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:57:49