gpt4 book ai didi

java - [JAVA]递归删除扫雷中的空单元格

转载 作者:行者123 更新时间:2023-12-02 11:16:42 24 4
gpt4 key购买 nike

我现在正在执行扫雷任务。我用递归实现了删除空白区域的功能。然而我的程序总是遇到错误。错误消息指出:线程“AWT-EventQueue-0”java.lang.StackOverflowError 中出现异常

这是我的代码,我知道它看起来很乱,提前道歉。我将不胜感激任何帮助!

public void removeEmptyRegion(int x, int y){ //note: uses recursive decomposition
if (x < 0 || x > width-1 || y < 0 || y > length-1) {
return; // check for bounds
}else if(tiles[y][x].getClicked()){ //first time activated this method
//checks the tiles surround it
removeEmptyRegion(x,y+1);//up
removeEmptyRegion(x,y-1);//down
removeEmptyRegion(x+1,y);//left
removeEmptyRegion(x-1,y);//right
removeEmptyRegion(x-1, y+1); //up-left
removeEmptyRegion(x+1, y+1); //up-right
removeEmptyRegion(x-1,y-1); //down-left
removeEmptyRegion(x+1,y-1); //down-right
}
else if(!(tiles[y][x].getValue() == -1) && tiles[y][x].getClicked() == false ) {
//check: -1 indicates it is a bomb
if(tiles[y][x].getValue() == 0) {
tiles[y][x].clickTile();
//chain reaction
removeEmptyRegion(x,y+1);//up
removeEmptyRegion(x,y-1);//down
removeEmptyRegion(x+1,y);//left
removeEmptyRegion(x-1,y);//right
removeEmptyRegion(x-1, y+1); //up-left
removeEmptyRegion(x+1, y+1); //up-right
removeEmptyRegion(x-1,y-1); //down-left
removeEmptyRegion(x+1,y-1); //down-right
return;
}else { //stops if the tile is a numbered tile
tiles[y][x].clickTile();
return;
}
} else {
return;
}
}

最佳答案

您递归地检查每个图 block 的每个可能的方向。假设您的代码位于 0,0,现在它会检查上面的图 block 。现在是 0,1。然后,从 0,1 开始,您的代码检查几个方向,包括向下。现在又回到了 0,0 点。这会无限重复,导致堆栈溢出。

我建议使用一种叫做内存的东西。

创建一个与扫雷网格尺寸相同的boolean[][]。当您选中一个正方形时,请标记 boolean[y][x]=true

在方法的顶部检查是否越界,使用 if (boolean[y][x]) 来检查是否已经检查过。

关于java - [JAVA]递归删除扫雷中的空单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50219490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com