为什么即使其中一个条件为真,这个布尔值也会出现错误?

时间:2017-04-21 01:06:41

标签: java loops boolean

所以我有这个简单的布尔方法来检查我的游戏是否已经结束。在main方法中,我有一个以语句while (isGameEnd() == false) {...}开头的大循环。即使方法中的一个,两个或所有条件成立,该循环也似乎永远不会中断。我不明白。

public static boolean isGameEnd() {
        if (lives == 0 || steps == 0 || isMazeCompleted()) { return true; }
        else { return false; }
}

1 个答案:

答案 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(),这使程序员对错误更加明显是