Java:while while循环中的bug

时间:2017-02-16 05:11:20

标签: java int do-while

请耐心等待:我只参加过一门Java课程,我的想法对于我的专业水平来说太大了,但无论如何我都试图实施它们。所以我对Java的理解很脆弱,我的代码很复杂。

我的java do-while循环中的int返回为0,然后在循环的几个循环之后,当它不应该被执行时它再次弹出10并且它不可能去最多10个。

以下是文字游戏程序的输出

1. Attack
2. Block
3. Dodge
4. Escape & Evade

2
Block: 0

Damage: 4

KEELBREAKER

Physical readiness: 44/50 (FNG)


1. Attack
2. Block
3. Dodge
4. Escape & Evade

1

Attack: 6 - Block: 10 = Damage -4

MUGGER

Physical readiness: 54/50 (FNG)

Damage: 5

KEELBREAKER
Physical readiness: 25/50 (FNG)

1. Attack
2. Block
3. Dodge
4. Escape & Evade

看粗体。在第一个循环选项2中选择“块”,游戏计算零值,没有效果。六个周期后(删除)选项1“攻击”被选中。游戏计算的块值为10,对敌人物体施加负面伤害“治疗”4点,使其达到最大生命值。

显然这里有很多错误。但我最关心的是阻塞功能。鉴于来自玩家和敌方物体的输入,不应该达到十。此外,每次玩家选择阻止时,它返回的值为0.另外,我还没有为敌方物体的转弯实施阻挡功能,所以敌人不应该阻挡。所以我启动块函数返回0什么都不做,然后值以某种方式通过循环循环6次无所事事并且每次都不显示。然后神奇地变成了10,在敌人的物体转向它甚至不存在的地方。我很困惑。这已经很长了所以我很抱歉,但现在我会附上代码。代码是......一团糟。我会尽可能地尽力清理它。

public class Combat {

public static void indivCombat(Player playerObject, Enemy enemyObject)
{
    boolean inCombat = true;
    int combatChoice = 0;
    int compResponse = 0;
    int damage = 0;
    int defense = 0;
    double evadeChance = 0;
    int exp = 0;
    int loot = 0;
    int sum = 0;

    Scanner keyboard = new Scanner(System.in);

    Random randNum = new Random();

    System.out.println(enemyObject.getType() + " is engaging!");

    //do while inCombat is true
    do
    {
        System.out.println("1. Attack\n2. Block\n3. Dodge\n4. Escape & Evade");
        combatChoice = keyboard.nextInt();

        //player's turn
        switch(combatChoice)
        {
        case 1:
            compResponse = (randNum.nextInt(151)+50)/100;
            if (compResponse < evadeChance)
            {
                System.out.println(enemyObject.getType() + " evaded attack!");
                damage=0;
            }
            else
            {
                damage = playerObject.getAttack() - enemyObject.getDefense() + randNum.nextInt(playerObject.getAttack() + 1);
                if (damage<0)
                    damage = 0;
                enemyObject.setHealth(enemyObject.getHealth() - damage + defense);
                if (defense != 0)
                {
                    sum = damage - defense;
                    System.out.println("Attack: "+damage + " - Block: " + defense + " = Damage " + sum);
                }
                else
                {
                    System.out.println("Damage: "+damage);
                }
                enemyObject.displayEnemyHealth();
            }
            evadeChance = 0;
            defense = 0;
            break;
        case 2:             
            defense = playerObject.getDefense() - enemyObject.getAttack();
            if (defense > 0)
                defense = randNum.nextInt(playerObject.getDefense())*9/10;
            else if (defense == 0)
                compResponse = randNum.nextInt(1);
                switch (compResponse)
                {
                case 0: defense = 0;
                case 1: defense = playerObject.getDefense()*5/10;
                } 
            defense = randNum.nextInt(playerObject.getDefense())*1/10;
            System.out.println("Block: " + defense);
            break;

块功能包含在底部的情况2中。我从一开始就包含了所有内容,以防上述内容影响它。我把下面的一切都搞砸了,因为它太长了。

现在在这种情况下,playerObject.getDefense()为4,enemyObject.getAttack()为5。 无论如何计算到10.我真正不明白的是这个如何计算为0,然后通过循环再循环6次,即使它应该在敌人的下一次攻击之后终止。然后变为10而没有输入敌人对象,因为它没有能力使用阻止?

1 个答案:

答案 0 :(得分:0)

要求别人阅读和理解这是很多信息。也许你可以用编程术语来提问,而不是对游戏的完整解释?

无论如何,这是否可能是if case 2中缺少括号引起的?切换代码将始终执行,即使它是缩进的。