Java 为什么即使其中一个条件为真,布尔值也为假?

Java 为什么即使其中一个条件为真,布尔值也为假?,java,loops,boolean,Java,Loops,Boolean,所以我有一个简单的布尔方法来检查我的游戏是否结束了。在main方法中,我有一个大循环,它以语句开始,而(isGameEnd()==false){…}。即使方法中的一个、两个或所有条件变为真,这个循环似乎也不会中断。我不明白 public static boolean isGameEnd() { if (lives == 0 || steps == 0 || isMazeCompleted()) { return true; } else { return fals

所以我有一个简单的布尔方法来检查我的游戏是否结束了。在main方法中,我有一个大循环,它以语句
开始,而(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()
,这使得程序员更清楚错误所在。

使用调试器,但没有一个条件是
true
。此外,您发布的代码相当于
returnlifes==0 | | steps==0 | | isMazeCompleted()你能在main方法中显示代码吗?真的不应该评论缩进样式,所以我不会
System.out.printf(“行:%d步骤:%d mazeCompleted:%b%n”,行,步骤,isMazeCompleted())@OusmaneMahyDiaw Apophasis很有趣:)