Java 为什么我的程序循环次数比需要的多两倍?

Java 为什么我的程序循环次数比需要的多两倍?,java,loops,Java,Loops,我对编程完全陌生,我正在为课堂制作一个程序。对于这个项目,我需要制定一个“自我指导”的计划。我想做一个简单的程序;我想要一个战斗模拟器!因此,该计划的重点是这样做: 介绍你,然后开始战斗。攻击完全是随机的,你和“敌人”战斗,直到你们中的一个达到0点生命。我希望节目结束,展示你和你的敌人的健康状况,告诉你是否赢了。非常简单,但比你想象的要难,尤其是在我所学的编程知识不足的情况下。我只是需要帮助修复或简化它。如果你能帮忙,谢谢你提供的信息!代码如下: import java.util.Scanner

我对编程完全陌生,我正在为课堂制作一个程序。对于这个项目,我需要制定一个“自我指导”的计划。我想做一个简单的程序;我想要一个战斗模拟器!因此,该计划的重点是这样做: 介绍你,然后开始战斗。攻击完全是随机的,你和“敌人”战斗,直到你们中的一个达到0点生命。我希望节目结束,展示你和你的敌人的健康状况,告诉你是否赢了。非常简单,但比你想象的要难,尤其是在我所学的编程知识不足的情况下。我只是需要帮助修复或简化它。如果你能帮忙,谢谢你提供的信息!代码如下:

import java.util.Scanner;

public class TG_UN4EX13 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        String rumble = "startvalue";

        System.out.println("Welcome to the Ultimate Battle Game!");
        System.out.println("Have Fun!");

        // Attack Section //
        int attack1 = 5;
        int attack2 = 10;
        int attack3 = 20;
        int attack4 = 40;
        int cower = 0;

        // Character Section//
        int playerhealth = 100;
        // Character Section//

        // Enemy Section//
        int enemyhealth = 100;
        // Enemy Section//

        while (playerhealth >= 0 || enemyhealth >= 0 || rumble.equalsIgnoreCase("Yes")) {
            int attacknumber = (int) (Math.random() * (5 - 1 + 1) + 1);
            int attacknumber2 = (int) (Math.random() * (5 - 1 + 1) + 1);

            if (attacknumber == 1) {
                enemyhealth = enemyhealth - attack1;
                System.out.println("You used Punch!");
                System.out.println("You did " + attack1 + " damage! \n");
            } else if (attacknumber == 2) {
                enemyhealth = enemyhealth - attack2;
                System.out.println("You used Kick!");
                System.out.println("You did " + attack2 + " damage! \n");
            } else if (attacknumber == 3) {
                enemyhealth = enemyhealth - attack3;
                System.out.println("You used Jab!");
                System.out.println("You did" + attack3 + " damage! \n");
            } else if (attacknumber == 4) {
                enemyhealth = enemyhealth - attack4;
                System.out.println("You used Roundhouse Kick!");
                System.out.println("You did " + attack4 + " damage! \n");
            } else if (attacknumber == 5) {
                enemyhealth = enemyhealth - cower;
                System.out.println("You cowered in fear!");
                System.out.println("You did " + cower + " damage! \n");
            }

            if (attacknumber2 == 1) {
                playerhealth = playerhealth - attack1;
                System.out.println("They used Punch!");
                System.out.println("They did " + attack1 + " damage! \n");
            } else if (attacknumber2 == 2) {
                playerhealth = playerhealth - attack2;
                System.out.println("They used Kick!");
                System.out.println("They did " + attack2 + " damage! \n");
            } else if (attacknumber2 == 3) {
                playerhealth = playerhealth - attack3;
                System.out.println("They used Jab!");
                System.out.println("They did " + attack3 + " damage! \n");
            } else if (attacknumber2 == 4) {
                playerhealth = playerhealth - attack4;
                System.out.println("They used Roundhouse Kick!");
                System.out.println("They did " + attack4 + " damage! \n");
            } else if (attacknumber2 == 5) {
                playerhealth = playerhealth - cower;
                System.out.println("They cowered in fear!");
                System.out.println("They did " + cower + " damage! \n");
            }

            System.out.println("You have " + playerhealth + " health!");
            System.out.println("They have " + enemyhealth + " health! \n");

        }

        if (playerhealth > enemyhealth) {
            System.out.println("You won!");
            System.out.println("Do you want to play again?");
            rumble = scan.nextLine();
        } else {
            System.out.println("You lost!");
            System.out.println("Do you want to play again?");
            rumble = scan.nextLine();
        }

        if (rumble.equalsIgnoreCase("no")) {
            System.out.println("Well, goodbye!");
            System.exit(0);
        }

    }
}
注意:这是一个快速编辑,但下面是一个示例:

你有20个健康!他们有20个健康

你用了刺拳!你造成了20点伤害

他们用了圆踢!他们造成了40点伤害

你有-20的健康!他们没有健康

你用了刺拳!你造成了20点伤害

他们用了圆踢!他们造成了40点伤害

你有-60的健康!他们有-20健康

你输了!你想再玩一次吗


我不确定,但我认为你可能需要改变:

while(playerhealth>=0 | | | enemyhealth>=0 | | |隆隆声。相等信号情况(“是”))

while((playerhealth>0&&enemyhealth>0)| |隆隆声。相等信号情况(“是”))

如果运行状况为
=0
,它将再次运行,因此请删除
=

查看循环的条件

while (playerhealth >= 0 || enemyhealth >= 0 || rumble.equalsIgnoreCase("Yes")) {
    //do stuff
}
你的意思是,“在下列任何一个条件成立时继续战斗”:

  • 球员健康状况良好

  • 敌人的健康状况良好

  • 隆隆声=是

  • 现在想想要退出这个循环(即结束游戏)需要什么

    退出循环与留在循环中是相反的,因此您需要与这些条件相反的条件,即“当以下所有条件均为真时停止战斗”:

  • 玩家生命值小于0

  • 敌人生命值小于0

  • 隆隆声!=对


  • 你的意思是,战斗只在玩家和敌人的生命值都为负时结束,还是应该在玩家或敌人的生命值都为负时结束?

    在使用代码进一步移动之前,请使用IDE工具正确格式化/缩进代码。它现在是不可读的,这有助于隐藏许多小错误。编辑:我设置了您的示例的格式,但以后在您的所有项目中尝试自己进行。此外,您还需要检查每次攻击后的运行状况是否为0,以便您不会被最近死亡的人击中。@Berdesdan您需要测试的原因;-)@这对我来说很有效!非常感谢你!这是一个多么简单的错误,幸运的是我还在学习,这真的很有帮助。