Java while循环在需要时不结束
所以一些背景信息,我是编程新手,还在学习,所以我为我犯的小错误道歉。我正在制作我自己的基于文本的游戏,只是为了进一步练习等等 以下是dropbox上所有内容的链接,以了解更多内容: 我目前正在尝试为我的游戏实现战斗系统,我遇到了战斗序列没有在需要时结束的问题。“战斗序列”是一个while循环,如下所示:Java while循环在需要时不结束,java,while-loop,bluej,text-based,Java,While Loop,Bluej,Text Based,所以一些背景信息,我是编程新手,还在学习,所以我为我犯的小错误道歉。我正在制作我自己的基于文本的游戏,只是为了进一步练习等等 以下是dropbox上所有内容的链接,以了解更多内容: 我目前正在尝试为我的游戏实现战斗系统,我遇到了战斗序列没有在需要时结束的问题。“战斗序列”是一个while循环,如下所示: public void startCombat() { inCombat = true; while(inCombat != false)// && her
public void startCombat()
{
inCombat = true;
while(inCombat != false)// && herohealth > 0 && monsterhealth > 0)
{
checkAlive();
heroHitMonster();
checkAlive();
monsterHitHero();
}
attackinghero.setHeroHealth(herohealth);
attackedmonster.setMonsterHealth(monsterhealth);
}
public void checkAlive()
{
if(herohealth <= 0)
{
System.out.println("You have died.");
attackinghero.clearInventory();
inCombat = false;
}
else if(monsterhealth <= 0)
{
System.out.println("You have killed the "+attackedmonster.getmonsterName()+"!");
inCombat = false;
combatlocation.removeMonster(attackedmonster.getmonsterName());
}
else
{
//
}
}
其中checkAlive()方法如下所示:
public void startCombat()
{
inCombat = true;
while(inCombat != false)// && herohealth > 0 && monsterhealth > 0)
{
checkAlive();
heroHitMonster();
checkAlive();
monsterHitHero();
}
attackinghero.setHeroHealth(herohealth);
attackedmonster.setMonsterHealth(monsterhealth);
}
public void checkAlive()
{
if(herohealth <= 0)
{
System.out.println("You have died.");
attackinghero.clearInventory();
inCombat = false;
}
else if(monsterhealth <= 0)
{
System.out.println("You have killed the "+attackedmonster.getmonsterName()+"!");
inCombat = false;
combatlocation.removeMonster(attackedmonster.getmonsterName());
}
else
{
//
}
}
public void checkAlive()
{
如果(heroheathcheckAlive不应为空,则它应为布尔值,并应返回inCombat,在函数startCombat中,您应执行inCombat=checkAlive();您应在checkAlive结束时结束循环,而不是更改布尔值。
如果你在第一次命中时杀死了怪物,你仍然会执行怪物甚至,如果怪物被杀死。命中的函数应以英雄/怪物的生命为条件。while循环仅在两个动作后计算。你需要一种方法在英雄命中怪物后打破循环。我个人会更改checkAlive方法以返回布尔值,并将命中方法放入while循环:
if(checkAlive())
{
heroHitMonster();
}
if(checkAlive())
{
monsterHitHero();
}
不是您的答案,而是良好的编程实践:使用while(inCombat)而不是while(inCombat!=false)。您是否收到“youhavedead”和/或“youhavedead..”消息?此外,您是否100%确认循环没有退出?这不是解决方案,但可能会使您的代码不那么神秘。如果(x!=false),您需要知道
与if(x==true)
相同,这与if(x)
相同,因此可能会将while(inCombat!=false)
更改为while(inCombat)
?@Pshemo。谢谢。