繁体   English   中英

在do-while循环中从整数减去

[英]Subtracting from an Integer within a do-while loop

我通常是编程的新手,几天前才刚开始使用Java编程,所以我不确定我尝试完成的代码是否可以用我的程序编码的方式实现。

我基本上是在编写一个程序,要求“强度”值在0到9之间。它要求您选择一种武器((1)“刀”是唯一可用的一种)。 它获取这些信息,并在1-3加上您的力量所达到的数字之间产生随机的伤害比率,并且应该不断从20中减去该值,直到达到0,然后退出。

问题是我陷入了循环。 它从20中减去该值,但重新开始并继续从20中减去,而不是存储相减后的数字。

有谁对如何实现这样的目标有任何建议吗? 很感谢任何形式的帮助。 到目前为止,这是我的代码。

package untitledgame;

import java.util.Random;
import java.util.Scanner;   

public class UntitledGame {


    public static void main(String[] args){

        int pStrength, wKnife, damage, enemyDamage;

        Scanner in = new Scanner(System.in);  //used for next to int inputs

        System.out.println("Choose Your Strength (0-9)");
        pStrength = in.nextInt();
        System.out.println("Your Strength Is "+pStrength);

        System.out.println("Choose Your Weapon; (1)Knife");
        wKnife = in.nextInt();

        System.out.println("Press ENTER to battle...");
        Scanner scanner = new Scanner(System.in);  //waits for users to continue
        scanner.nextLine();



        if (wKnife == 1){


        do {

            int enemyHP = 20;

            Random rn = new Random();  //Random generator
            wKnife = rn.nextInt(3) + 1;  //Randomly generates knife damage


            damage = wKnife + pStrength;  //Damage logic
            System.out.println("Attack with knife has done: " );  //Knife damage     
            System.out.print(+damage);
            System.out.print(" damage." );

            System.out.println("");

            enemyDamage = enemyHP - damage;  // Remaing HP 

            System.out.println("Enemy has ");
            System.out.print(+enemyDamage);
            System.out.print(" HP left.");

            System.out.println("");

            System.out.println("Press Enter to Attack...");         
            scanner.nextLine();  

        } 
            while (enemyDamage > 0);

            System.out.println("Enemy has been defeated.");


        }

    }

}

宣告这个int enemyHP = 20; do-while循环之外。 现在,每次循环时,您都将enemyHP重置为20。

另外,您不应在do-while循环中重新创建您的Random 在进入do块之前执行此do

乔纳·海尼(Jonah Haney)在回答中还涉及其他逻辑问题。

在循环开始之前声明int enemyHP = 20 然后您的循环缺少以下行:

enemyHP = enemyHP - damage;

同样,您似乎希望循环继续运行,直到击败敌人为止。 如果是这种情况,则您的状况应检查是否enemyHP ,如下所示:

}
    while (enemyHP > 0);    //instead of while (enemyDamage > 0);

编辑

这就是您的代码应该是什么样子。 我并不是说您应该将其直接复制到您的项目中。 我要说的是,您应该看看它们之间的差异,这将有助于您查看自己代码中的逻辑问题:

public static void main(String[] args){

    int pStrength, wKnife, damage, enemyDamage;

    Scanner in = new Scanner(System.in);  //used for next to int inputs

    System.out.println("Choose Your Strength (0-9)");
    pStrength = in.nextInt();
    System.out.println("Your Strength Is " + pStrength);

    System.out.println("Choose Your Weapon; (1)Knife");
    wKnife = in.nextInt();

    System.out.println("Press ENTER to battle...");
    in.nextLine();
    in.nextLine();

    Random rn = new Random();  //Random generator
    int enemyHP = 20;

    if (wKnife == 1){

        do {
            System.out.println("Press Enter to Attack...");         
            in.nextLine();  

            wKnife = rn.nextInt(3) + 1;   //Randomly generates knife damage
            damage = wKnife + pStrength;  //Damage logic

            System.out.println("Attack with knife has done: " + damage + " damage.");  //Knife damage

            enemyHP -= damage;            // Calculate Remaining HP 
            System.out.println("Enemy has " + enemyHP + " HP left.");

        } while (enemyHP > 0);

        System.out.println("Enemy has been defeated.");
        in.close();
    }
}

您可能希望在do-while循环的外部初始化您的敌人HP变量,否则它将在每次循环时将heroHP重置为20。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM