所以我有这个简单的布尔方法来检查我的游戏是否已经结束。在main方法中,我有一个以语句while (isGameEnd() == false) {...}
开头的大循环。即使方法中的一个,两个或所有条件成立,该循环也似乎永远不会中断。我不明白。
public static boolean isGameEnd() {
if (lives == 0 || steps == 0 || isMazeCompleted()) { return true; }
else { return false; }
}
答案 0 :(得分:1)
在函数定义中使用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()
,这使程序员对错误更加明显是