繁体   English   中英

我的do-while陈述似乎无效

[英]My do-while statement doesn't seem to work

我是编码的新手,我想知道你们是否可以帮助我。 这是与RPG风格的吸血鬼作斗争的代码的一部分。 当我在代码底部附近将转数设置为1后,我的程序不会循环回到我的字符转,这是为什么?

/**
* Created by f on 7/30/2014.
*/
import java.util.Scanner;
import java.util.Random;

public class rpgBattle {
public static void main(String[] args) {
    // Declarations
    int charHp = 3941;
    int enemyHp = 5200;
    String charName;
    int numDmg;
    int dmgMultiplier = 1;
    String playerInputSt;
    int playerInput;
    int turn = 1;
    int miss;

    //Processes
    Scanner user_input = new Scanner(System.in);
    System.out.println("Enter your name.");
    charName = user_input.next();
    System.out.println();
    System.out.println("A vampire emerged!");
    do {
                System.out.println();
                System.out.println(charName + "'s HP: " + charHp + "/3941");
                System.out.println("The Vampire's HP: " + enemyHp + "/5200");
                System.out.println("What will you do?");
                System.out.println("Enter the number corresponding to the action you would like to perform.");
                System.out.println("1. Attack");
                System.out.println("2. Defend");
                System.out.println(turn);
                playerInputSt = user_input.next();
                playerInput = Integer.parseInt(playerInputSt);
                if (playerInput == 1) {
                    Random rand = new Random();
                    miss = rand.nextInt(19);
                    if (miss == 0) {
                        System.out.println();
                        System.out.println("The Vampire protected itself.");
                        numDmg = 0;
                    } else {
                        numDmg = rand.nextInt(100) + 550;
                    }
                    enemyHp = enemyHp - numDmg / 1;
                    System.out.println();
                    System.out.println(charName + " attacks!");
                    System.out.println("The Vampire took " + numDmg / dmgMultiplier + " damage!");
                    turn = 2;
                } else if (playerInput == 2) {
                    System.out.println();
                    System.out.println(charName + " guards");
                    System.out.println(charName + " recovered 394 HP!");
                    charHp = charHp + 394;
                    dmgMultiplier = 2;
                    turn = 2;
                };
    } while (charHp > 0 && enemyHp > 0 && turn !=2);
    do {
        Random rand = new Random();
        miss = rand.nextInt(19);
        if (miss == 0) {
            System.out.println();
            System.out.println(charName + " braced himself.");
            numDmg = 0;
        } else {
            numDmg = rand.nextInt(500) + 200;

            charHp = charHp - numDmg / dmgMultiplier;
        }
        System.out.println("The Vampire attacks!");
        System.out.println(charName + " took " + numDmg / dmgMultiplier + " damage!");
        dmgMultiplier = 1;
        turn = 1;
    } while (turn == 2);
}
}

它永远不会结束,因为在顶级循环中,退出的条件是角色的生命值降至0以下。但是,您绝不会降低其HP。 您只是在降低吸血鬼的生命值,而不是角色。 如果您希望游戏结束,请让吸血鬼也攻击角色。 这样,在某些时候他的HP将降至0以下,游戏将结束。

但是,要使其更加逼真,您应该在吸血鬼的HP或角色的HP为0时结束游戏,而不是在两者都低于0时结束游戏。要实现这一点,请使用2,而不是使用3个循环更改条件,以便当其中任何一个没有HP时,它将结束:

do {
    do {
        ...
    } while (turn == 1);
} while (charHp > 0 && enemyHp > 0);

无需花费太多时间分析所有代码,就好像您为charHp嵌套了Do..While循环,而对敌人Hp嵌套了Do..While循环。 我想你只需要一个do..while循环是循环, 直到 charHp或enemyHp为零。

        do {
            do {

               //.... Lots of code removed for brevity in the answer .....

                } while (turn == 1);
        } while ((enemyHp > 0) && (charHp > 0));

还是应该这样,只有一个Do..While循环

        do {

               //.... Lots of code removed for brevity in the answer .....

        } while ((turn == 1) && (enemyHp > 0) && (charHp > 0));

可变转弯的目的是什么? 输入有效值后,直到游戏结束,其值将一直为2,因此内部while循环将始终仅循环一次。 但是随着外部循环继续循环直到得分降为0,代码仍将每次执行。

如果您想知道正在玩的回合数,则应增加转数:

turn++;

并删除最内部的while循环。

如果要在用户输入有效值之前进行循环,则应在最内部循环的开始处初始化转弯:

    turn=1;

祝好运。

暂无
暂无

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

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