所以基本上我有一个随机数生成器,如果数字是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!!!");
}
}
}
}
}
答案 0 :(得分:1)
修复缩进。这应该表明else
是里面 while
语句,并附加到[仅]最后if
。也就是说,else
主体会在!(attack == 3)
时执行每个循环。
然后解决方法是移除else
并将其直接放置在之后 while
,它仅在循环结束后运行,因为怪物已被杀死。
答案 1 :(得分:0)
现在,你有两个if语句和一个if-else。为了澄清这个东西是如何工作的,它将检查第一个if语句attack == 1
,如果它是真的那么它将执行这个块,然后它将检查第二个if语句attack == 2
。当攻击为1时它将是错误的,然后它将检查第三个if语句attack == 3
它是否也为假,但是这个if语句有一个else块,所以else块将被执行并且它将打印,{{ 1}}。
要更正您的逻辑,您需要使用You defeated the monster
。尝试类似的事情,
Nested if-else
在这个逻辑中,只有当所有三个if语句都为假时才会执行else块。