Java 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

所以一些背景信息,我是编程新手,还在学习,所以我为我犯的小错误道歉。我正在制作我自己的基于文本的游戏,只是为了进一步练习等等

以下是dropbox上所有内容的链接,以了解更多内容:

我目前正在尝试为我的游戏实现战斗系统,我遇到了战斗序列没有在需要时结束的问题。“战斗序列”是一个while循环,如下所示:

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。谢谢。