Java 为什么我的else语句不能正常工作?

Java 为什么我的else语句不能正常工作?,java,while-loop,Java,While Loop,所以基本上我有一个随机数生成器,如果这个数字是3,(这在测试中很常见),它会“生成”一个怪物,它会产生一个while循环,说当怪物的生命值>0时,继续重复while循环,它说你打败了怪物。但出于某种原因,它一直说当怪物的生命值为任何数字时,你打败了怪物,但仍然要求我再进行一次攻击。有什么建议吗 Random dice = new Random(); for(int counter=1; counter<=3; counter++) {

所以基本上我有一个随机数生成器,如果这个数字是3,(这在测试中很常见),它会“生成”一个怪物,它会产生一个while循环,说当怪物的生命值>0时,继续重复while循环,它说你打败了怪物。但出于某种原因,它一直说当怪物的生命值为任何数字时,你打败了怪物,但仍然要求我再进行一次攻击。有什么建议吗

Random dice = new Random();

            for(int counter=1; counter<=3; counter++)
            {
                number = 1+dice.nextInt(3);

                if(number==(3))
                {
                    monster_base_health = 600;
                    monster_base_dmg = 60;
                    System.out.println("A monster appeared!!");

                    while(monster_base_health>0)
                    {
                        System.out.println("Would you like to use 1. Fire Blast, 2. Ice Blast, 3. Void Ray? (Just type 1, 2, or 3)");
                        System.out.println();
                        int attack;
                        attack = input.nextInt();
                        if(attack==1)
                        {
                            monster_base_health = monster_base_health - mage_fire;
                            System.out.println("You used Fire Blast. The Monster now has " + monster_base_health + " health!");
                            System.out.println();

                        }
                        if(attack==2)
                        {
                            monster_base_health = monster_base_health - mage_iceblast;
                            System.out.println("You used Ice Blast. The monster has " + monster_base_health + " health!");
                            System.out.println();
                        }
                        if(attack==3)
                        {   
                            monster_base_health = monster_base_health - mage_voidray;
                            System.out.println("You used Void Ray. The monster has " + monster_base_health + " health!");
                            System.out.println();
                        }   

                    else
                    {
                        System.out.println("You defeated the monster!!!");

                    }
                }

            }

        }

    }
Random dice=new Random();
用于(整数计数器=1;计数器0)
{
System.out.println(“您想使用1.火焰冲击波、2.冰冲击波、3.无效射线吗?(只需键入1、2或3)”;
System.out.println();
智力攻击;
攻击=输入.nextInt();
如果(攻击==1)
{
怪物基础健康=怪物基础健康-法师火;
System.out.println(“你使用了火焰冲击。怪物现在有“+怪物基础健康+”健康!”);
System.out.println();
}
如果(攻击=2)
{
怪物基础健康=怪物基础健康-法师冰川;
System.out.println(“你使用了冰爆。怪物有“+怪物基础健康+”健康!”);
System.out.println();
}
如果(攻击=3)
{   
怪物基础健康=怪物基础健康-法师射线;
System.out.println(“你使用了虚空射线。怪物有“+怪物基础健康+”健康!”);
System.out.println();
}   
其他的
{
System.out.println(“你打败了怪物!!!”;
}
}
}
}
}
修复缩进。这应该表明
else
既在
while
语句中,又[仅]附加到最后一个
if
。也就是说,
else
主体将在
时执行每个循环!(攻击==3)


解决方法是移除
else
并将其主体直接放在
之后,而
仅在循环结束后运行,因为怪物已被杀死。

现在,您有两个if语句和一个if-else语句。为了弄清楚这是如何工作的,它将检查第一条if语句
attack==1
,如果为true,则它将执行此块,然后它将检查第二条if语句
attack==2
。当攻击为1时,它将为false,然后它将检查第三条if语句
attack==3
它也是false,但该if语句有一个else块,因此将执行else块并打印,
您打败了怪物

要更正逻辑,需要使用
嵌套if-else
。试一试

if(attack==1)
{
    monster_base_health = monster_base_health - mage_fire;
    System.out.println("You used Fire Blast. The Monster now has " + monster_base_health + " health!");
    System.out.println();
}
else if(attack==2)
{
    monster_base_health = monster_base_health - mage_iceblast;
    System.out.println("You used Ice Blast. The monster has " + monster_base_health + " health!");
    System.out.println();
}
else if(attack==3)
{   
    monster_base_health = monster_base_health - mage_voidray;
    System.out.println("You used Void Ray. The monster has " + monster_base_health + " health!");
    System.out.println();
}   
else
{
    System.out.println("You defeated the monster!!!");
}

在这个逻辑中,只有当所有三个if语句都为false时,才会执行else块。

我想我需要澄清(attack==3)是一个特定的拼写,与随机数不同generator@NathanSpangenberg那很好-修复标识。然后自己验证我的分析,当所有内容都正确对齐时,这将更容易。以后,请为您使用的语言添加一个标记。这一次我做到了:)因为你是这里的新用户,我想告诉你,如果你在这里找到了问题的解决方案,那么你应该接受答案,告诉别人哪一个适合你。要接受任何答案,你只需点击答案左侧上下箭头下方的“右勾号”符号即可。这一更改仍然没有意义,并且与最初的更改一样存在核心问题:它会告诉用户他们在输入无效攻击后打败了怪物(如4),但它不会告诉他们什么时候打败了怪物。然而,像这样格式化代码确实会使问题更加明显。