所以我有这个简单的布尔方法来检查我的游戏是否结束。在main方法中,然后有一个大循环,以语句while (isGameEnd() == false) {...}
开始。即使方法中的一个,两个或所有条件变为真,此循环也似乎永不中断。我不明白
public static boolean isGameEnd() {
if (lives == 0 || steps == 0 || isMazeCompleted()) { return true; }
else { return false; }
}
最佳答案
在函数定义中使用static
对我来说是一个危险信号。如果使用默认字段值定义了一个类,则将检查这些默认值,而不是该类的特定实现:
class Game {
int lives = 3;
int steps = 10;
public boolean isMazeCompleted() {
return false;
}
public void doStuff() {
lives--;
}
public static boolean isGameEnd() {
if (lives == 0 || steps == 0 || isMazeCompleted()) {
return true;
} else {
return false;
}
}
}
public static void main(String[] args){
Game a;
while(!a.isGameEnd()){ // check 'isGameEnd' for the static class
a.doStuff(); // This does *not* update the static class
}
}
大多数Java编辑器都会抱怨在非静态上下文中使用静态函数,因此会建议使用
Game.isGameEnd()
而不是a.isGameEnd()
,这对于程序员在哪里出现错误更加明显。