我试图用Java制作一个扫雷游戏,但我一直遇到这个错误。此函数设置要单击的当前方块和要单击的任何相邻方块,并以递归方式继续。当它用完正方形时它应该停止,但即使我用0地雷将字段大小设置为2x2,它也会溢出。
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”。在我的方法调用中。感谢大家的帮助。
答案 0 :(得分: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!
}
}
}
答案 1 :(得分: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);
}
}
}
答案 2 :(得分:0)
好吧,我只能猜测setClicked()
方法是mine
的成员,但是你不应该在你的情况下调用m.setClicked(true)
而不仅仅是setClicked(true)
吗?
答案 3 :(得分:0)
很难从你的代码片段中分辨出来,但我会说你不会迭代细胞。这意味着你一遍又一遍地递归检查同一个单元格(到无穷大和超出 woosh )。但是,周围的代码非常有用。