0

几天前我刚开始学习 Java,并开始编写扫雷游戏。问题是,当我尝试级联周围的块并显示块时,无论是空白还是带有取决于相邻炸弹数量的数字,我的递归失败并给我一个堆栈溢出错误。我的代码如下:

public void revealCell(int row, int col) 
{
  if(mAnswerBoard.get (row, col).equals ("1")||mAnswerBoard.get (row, col).equals("2")||
  mAnswerBoard.get (row, col).equals("3")||mAnswerBoard.get (row, col).equals("4")||
  mAnswerBoard.get (row, col).equals("5"))
  {
      mMinesweeperBoard.set (row, col, mAnswerBoard.get (row, col));
      return;
  }

  else if(mAnswerBoard.get (row, col).equals("0"))
  {
      mMinesweeperBoard.set (row, col, " ");
      for(int i = row - 1; i <= row + 1; i++)
      {
        if (i == -1)
        {
          i = 0;
       }
      for(int j = col - 1; j <= col + 1; j++)
      {
        if (j == -1)
        {
          j = 0;
        }
        if (mAnswerBoard.get (i, j).equals ("0") == false)
            {
              mMinesweeperBoard.set (i, j, mAnswerBoard.get (i, j));
            }
            else if (mAnswerBoard.get (i, j).equals (("0")))
            {
             if (mMinesweeperBoard.get (j, i).equals ("."))
             {
                mMinesweeperBoard.set(i, j, " "); 
               revealCell(i, j);
             }
           }
          }
      }
  }
}

我已经盯着这个看了好几个小时了,我真的无法理解为什么它不会停止循环。我最初的游戏板持有“。” 在未显示的位置中,如果为 0,则棋盘将保留一个空格。我尝试检查答案键是否当场为 0,如果是,实际的棋盘是否仍为“。” 在现场,我可以设置一个空格。出于某种原因,revealCell 被一遍又一遍地调用,我真的想不通。我做错了什么吗?

旁注:如果 i 和 j 为 -1,我必须将它们设置为 0,因为我的代码允许用户输入 0,0 作为有效坐标。

谢谢你的帮助,如果答案就在我面前,我很抱歉......

4

1 回答 1

1
             if (mMinesweeperBoard.get (j, i).equals ("."))

你切换ij这里,所以你测试了错误的单元格。将它们切换回来,看看是否可以解决它。

于 2014-01-10T05:54:36.703 回答