当满足“if ...< = 0”标准时,为什么没有发生?

时间:2015-06-09 10:37:25

标签: java

我有一个玩家控制的对象,设置为100健康。每次击中敌人都会下降。问题是,在达到0健康状态后,它仍然会继续进入负面因素。我有一个弹出窗口

private void playerHealth(){
    if (player.health <= 0)
        JOptionPane.showMessageDialog(null, "you lose");
        System.exit(0);
}

因此理论上,它应该在健康状况<= 0后弹出。但是,当我尝试运行它时,它会立即打开和关闭。我可以看到窗口瞬间。如果我删除了

JOptionPane.showMessageDialog(null, "you lose");
        System.exit(0);

并用say,

替换它
player.isAlive = false;

(对于玩家,敌人和所有子弹,isAlive设置为true),健康状况将继续减少超过负数。

这部分可能也有帮助:它删除死敌和子弹的代码,玩家没有类似的东西,所以这可能是问题所在。

private void removeDead(){
    for (int i = 0; i <bullets.size(); i++){
        if (bullets.get(i).isAlive == false )
            bullets.remove(i);
    }

    for (int i = 0; i <mobs.size(); i++){
        if (mobs.get(i).isAlive == false )
            mobs.remove(i);
    }

    for (int i = 0; i <mobBullets.size(); i++){
        if (mobBullets.get(i).isAlive == false )
            mobBullets.remove(i);
    }


    bullets.trimToSize();
    mobs.trimToSize();
    mobBullets.trimToSize();
}

所以任何帮助都表示赞赏。谢谢。 (所有代码都来自在线教程,这就是为什么我什么都不知道。)

3 个答案:

答案 0 :(得分:3)

如果要执行两个语句,请将它们包围在一个块中:

private void playerHealth() {
    if (player.health <= 0) {
        JOptionPane.showMessageDialog(null, "you lose");
        System.exit(0);
    }
}

如果没有花括号,System.exit(0);不是if语句的一部分,将始终执行,这解释了it just opens and closes immediately.

答案 1 :(得分:0)

我同意previous answer

但是,您需要知道将来如何避免此类问题。使用IDE或其他编辑器自动缩进代码。以下是对失败的if语句所做的事情:

  private void playerHealth() {
    if (player.health <= 0)
      JOptionPane.showMessageDialog(null, "you lose");
    System.exit(0);
  }

问题变得更加明显。

答案 2 :(得分:0)

如果你想在if语句中执行一段代码,你好像错过了{if if语句

if(something){ 
response;
}

所以它应该是这样的:

private void playerHealth() {
    if (player.health <= 0) {
        JOptionPane.showMessageDialog(null, "you lose");
        System.exit(0);
    }
}