【问题标题】:Java confused on how to arrange "if" statementsJava 对如何安排“if”语句感到困惑
【发布时间】:2017-06-06 22:41:23
【问题描述】:
int i = 1;
int answer;
int d;
int e;
boolean alive = true;

System.out.println("\n");

System.out.println(enemies[i].getName() + " has appeared!");

System.out.print("\n");

while (alive == true) {

    System.out.println("Hitpoints[HP]: " + enemies[i].getHP());
    System.out.println("Attack[ATK]  : " + enemies[i].getATK());
    System.out.println("Mana[MANA]   : " + enemies[i].getMANA());

    System.out.println("\n");

    System.out.println("[1 - Attack]");
    System.out.println("[2 - Flee]");

    answer = In.getInt();

    System.out.println("\n");

    if (answer == 1) {

        if (user.getP_HP() > 0) {
            d = enemies[i].getHP() - user.getP_ATK();
            enemies[i].setHP(d);

            System.out.println(user.getP_Name() + " strikes the " + enemies[i].getName() + " for " + user.getP_ATK() + " damage.");
            System.out.println(enemies[i].getName() + " has " + enemies[i].getHP() + " HP remaining.");
            System.out.println("\n");
        } else if (user.getP_HP() <= 0) {
            System.out.println(user.getP_Name() + " has been slain by the " + enemies[i].getName() + "!");
            alive = false;
        }

        if (enemies[i].getHP() > 0) {
            e = user.getP_HP() - enemies[i].getATK();
            user.setP_HP(e);

            System.out.println("The " + enemies[i].getName() + " attacked you for " + enemies[i].getATK() + " damage.");
            System.out.println(user.getP_Name() + " has " + user.getP_HP() + " HP remaining.");
            System.out.println("\n");
        } else if (enemies[1].getHP() <= 0) {
            System.out.println(user.getP_Name() + " has slain the " + enemies[i].getName() + "!");
            alive = false;
        }

    } else if (answer == 2) {
        System.out.println("You try to run, but fall into a pit of spikes and die!");
        alive = false;
    }
}

您好,我在解决这个问题大约 2 小时后遇到了问题。我要做的是让敌人在HP降到0或以下后立即死亡,对玩家也是如此。

这只有在玩家先杀死地精时才有效,而反之亦然。

每当敌人先杀死玩家时,它不会输出你已被杀死。相反,它让您可以选择是否要再次攻击或逃跑。选择攻击选项后,它才表明您已被杀死。但这还不是全部,在那之后地精会在程序停止之前再次攻击你。

如果敌人先杀了你,下面是示例输出:

stackoverflow strikes the Goblin for 1 damage.
Goblin has 12 HP remaining.


The Goblin attacked you for 3 damage.
stackoverflow has 1 HP remaining.


Hitpoints[HP]: 12
Attack[ATK]  : 3
Mana[MANA]   : 1


[1 - Attack]
[2 - Flee]
1


stackoverflow strikes the Goblin for 1 damage.
Goblin has 11 HP remaining.


The Goblin attacked you for 3 damage.
stackoverflow has -2 HP remaining.


Hitpoints[HP]: 11
Attack[ATK]  : 3
Mana[MANA]   : 1


[1 - Attack]
[2 - Flee]
1


stackoverflow has been slain by the Goblin!
The Goblin attacked you for 3 damage.
stackoverflow has -5 HP remaining.

【问题讨论】:

  • enemies[1].getHP() &lt;= 0 - 你的意思是改用enemies[i].getHP() &lt;= 0 吗?
  • alive == true 风格点:无需明确比较truefalse
  • @EJoshuaS 是的,谢谢你的敏锐眼光

标签: java loops if-statement


【解决方案1】:

试试这个:

int i = 1;
int answer;
int d;
int e;
boolean alive = true;

System.out.println("\n");

System.out.println(enemies[i].getName() + " has appeared!");

System.out.print("\n");

while (alive == true) {

    System.out.println("Hitpoints[HP]: " + enemies[i].getHP());
    System.out.println("Attack[ATK]  : " + enemies[i].getATK());
    System.out.println("Mana[MANA]   : " + enemies[i].getMANA());

    System.out.println("\n");
    if (user.getP_HP() > 0) {
        System.out.println("[1 - Attack]");
        System.out.println("[2 - Flee]");

        answer = In.getInt();

        System.out.println("\n");
    } else if (user.getP_HP() <= 0) {
            System.out.println(user.getP_Name() + " has been slain by the " + enemies[i].getName() + "!");
            alive = false;
            answer = 0; //so it won't execute the rest of the code
            }

    if (answer == 1) {

        d = enemies[i].getHP() - user.getP_ATK();
        enemies[i].setHP(d);

        System.out.println(user.getP_Name() + " strikes the " + enemies[i].getName() + " for " + user.getP_ATK() + " damage.");
        System.out.println(enemies[i].getName() + " has " + enemies[i].getHP() + " HP remaining.");
        System.out.println("\n");

        if (enemies[i].getHP() > 0) {
            e = user.getP_HP() - enemies[i].getATK();
            user.setP_HP(e);

            System.out.println("The " + enemies[i].getName() + " attacked you for " + enemies[i].getATK() + " damage.");
            System.out.println(user.getP_Name() + " has " + user.getP_HP() + " HP remaining.");
            System.out.println("\n");
        } else if (enemies[1].getHP() <= 0) {
            System.out.println(user.getP_Name() + " has slain the " + enemies[i].getName() + "!");
            alive = false;
        }

    } else if (answer == 2) {
        System.out.println("You try to run, but fall into a pit of spikes and die!");
        alive = false;
    }
}

在请求输入之前,您需要检查您是否还活着。可能不是最好的解决方案,但它是一个快速的解决方案,我希望它能为您指明正确的方向

【讨论】:

  • 啊,我明白了。从某种意义上说,您正在优先考虑用户。感谢您的帮助。
  • 很高兴能帮上忙!
【解决方案2】:

你实际上想按以下顺序做事(假设你攻击):

  1. 询问玩家是想攻击还是逃跑
  2. 你攻击
  3. 看看你有没有杀死怪物;如果是这样,游戏就结束了
  4. 怪物来袭
  5. 看看怪物有没有杀了你;如果是这样,游戏就结束了
  6. 重复直到出现 #3 或 #5

你颠倒了#3和#5。

另外,下面一行:

else if (enemies[1].getHP() <= 0)

我认为是一个错字。我假设你真的打算这样做

else if (enemies[i].getHP() <= 0)

【讨论】:

    【解决方案3】:

    似乎不是使用else if,而是你想要的是这样的:

    // Process both attacks first.
    if (user.getP_HP() > 0) {
        d = enemies[i].getHP() - user.getP_ATK();
        enemies[i].setHP(d);
    
        // ...
    }
    if (enemies[i].getHP() > 0) {
        e = user.getP_HP() - enemies[i].getATK();
        user.setP_HP(e);
    
        // ...
    }
    // Then resolve the deaths immediately after.
    if (user.getP_HP() <= 0) {
        // ...
        alive = false;
    }
    if (enemies[1].getHP() <= 0) {
        // ...
        alive = false;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多