2

我试图用 Java 制作一个扫雷游戏,但我一直遇到这个错误。此函数将当前方块设置为单击,并将任何相邻的方块设置为单击并递归继续。当它用完正方形时它应该停止,但即使我将字段大小设置为 2x2 和 0 个地雷,它也会溢出。

public void setClicked(boolean clicked){
    this.clicked = clicked;
    if(adjacentMines == 0)
        for(mine m : adjacent){
            if(!m.isClicked() && !m.isMine()){
                setClicked(true); //Should be m.setClicked(true);
            }
        }
}

问题解决了,我错过了“m”。在我的方法调用中。感谢大家的帮助。

4

4 回答 4

4

您需要调用setClicked相邻的矿井,而不是原始矿井,否则,您将setClicked(true)被一遍又一遍地调用源矿井

public void setClicked(boolean clicked){
    this.clicked = clicked;
    if(adjacentMines == 0)
        for(mine m : adjacent){
            if(!m.isClicked() && !m.isMine()){
                m.setClicked(true); // setClicked should be called on the adjacent mine, not on itself!
            }
        }
}
于 2011-07-12T14:25:04.157 回答
1

您在同一个矿井而不是相邻的矿井上调用 setClicked。

改成:

public void setClicked(boolean clicked){
    this.clicked = clicked;
    if(adjacentMines == 0)
        for(mine m : adjacent){
            if(!m.isClicked() && !m.isMine()){
                //missing the "m."
                m.setClicked(true);
            }
        }
}
于 2011-07-12T14:25:30.450 回答
0

好吧,我只能猜测该setClicked()方法是 的成员mine,但是您不应该m.setClicked(true)在您的条件中调用而不是仅仅调用setClicked(true)吗?

于 2011-07-12T14:26:34.153 回答
0

很难从您的代码片段中分辨出来,但我会说您不会遍历单元格。这意味着您正在一遍又一遍地递归检查同一个单元格(到无穷大和超越woosh)。不过,周围的代码会非常有用。

于 2011-07-12T14:27:44.457 回答