所以我拥有大部分将在扫雷游戏中级联显示的方法。我有一个解决方案的板,以及当前的网格之一。但问题是,当我遇到0空格时,我在递归调用时遇到堆栈溢出错误。
有没有人有任何想法?
public static void revealCell(int row, int col, char[][] grid, char[][] answers) {
System.out.println(row + " " + col);
if(row < 0|| row > 4){
System.out.println("bad");
return;
}
if(col < 0|| col > 4){
System.out.println("bad");
return;
}
if(answers[row][col] == 'B'){
grid[row][col] = answers[row][col];
return;
}
if(answers[row][col] == '1'||answers[row][col] == '2'||answers[row][col] == '3'||answers[row][col] == '4'||answers[row][col] == '5'){
grid[row][col] = answers[row][col];
return;
}
if(answers[row][col] == '0'){
System.out.println("go");
grid[row][col] = answers[row][col];
for(int i = row-1; i <= row +1; i++){
for(int j = col-1; j<= col +1;j++){
revealCell(i,j, grid, answers);
}
}
}
}
答案 0 :(得分:0)
这是因为你的revealCell()
周围的fors迫使它一遍又一遍地调用相同的0个单元格。您可以跟踪已访问过的单元格,并在致电revealCell()
之前检查它。
答案 1 :(得分:0)
您的嵌套循环重复调用revealCell(row, col, ...)
。重构你的循环,或者只是插入一个if i!=row && j!=col
守卫。
此更改后您可能仍会进行无限递归。自从我编写扫雷游戏以来已经有一段时间了,但是IIRC我使用了四种不同的递归调用以避免重复检查相同的单元格:一次调用从地雷碰撞点搜索了板的左上象限(增加 - 行,减少列),一个搜索右上象限(增加行,增加列)等。