所以我有这个简单的布尔方法来检查我的游戏是否结束。在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(),这对于程序员在哪里出现错误更加明显。

10-07 13:30