我几天前刚拿起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被一遍又一遍地调用,我真的无法弄明白。 我做错了什么?
旁注:如果它们是-1,我必须将i和j设置为0,因为我的代码允许用户输入0,0作为有效坐标。
感谢您的帮助,如果答案就在我的面前,我很抱歉...
答案 0 :(得分:1)
if (mMinesweeperBoard.get (j, i).equals ("."))
您在这里切换了i
和j
,因此您正在测试错误的单元格。将它们切换回来,看看是否能解决问题。