如果语句为真,为什么代码会转到其他地方?

时间:2019-07-19 22:46:01

标签: c# unity3d

我正在尝试通过关卡改进产生障碍,但是由于某些原因,当我在游戏中对其进行测试时,它并不能达到我想要的效果。

可以说我从26级开始比赛。

我可以正常玩到36级,即使35级也可以正确生成,但是当玩家完全达到36级时,代码会进入else语句,否则不会进入else if ..

这是我的代码,用于按级别生成障碍物。

if (curentLevel > 0  && curentLevel < 10)
{
    SpawnSpawner(0);
}
else if (curentLevel > 10 && curentLevel < 35)
{
    SpawnSpawner(1);
}
else if (curentLevel > 35 && curentLevel < 50)
{
    SpawnSpawner(2);
}
else if (curentLevel > 50 && curentLevel < 60)
{
    SpawnSpawner(5);
}
else 
{

}

执行else语句中的代码,在我的示例中,该代码在36级完全为空。

我希望有一个解决方案,为什么,因为我告诉程序检查当前水平是否高于36上的35,如果水平小于36上的50,那么我不知道为什么不这样做执行此代码:

 else if (curentLevel > 35 && curentLevel < 50)

我敢打赌我做错了,但我希望有人能指出解决方案,并解释为什么程序在我的思维方式中不起作用,非常感谢...

1 个答案:

答案 0 :(得分:2)

根据@Ruzihm在评论中的解释,您正在检查是否小于35并且大于35,因此,当currentLevel完全等于35时,它将在任何条件下都不为真。

根据评论中@DavidFreeman的回答,解决方案-解决您问题的方法是使代码的复杂度降低:

if (curentLevel < 10)
{
    SpawnSpawner(0);
}
else if (curentLevel < 35)
{
    SpawnSpawner(1);
}
else if (curentLevel < 50)
{
    SpawnSpawner(2);
}
else if (curentLevel < 60)
{
    SpawnSpawner(5);
}
else 
{

}

if (currentLevel > 10)是多余的,如果它不对true中的currentLevel < 10求值,那么在下一个else if中肯定是10或更多。

如果必须使用特定范围,则必须注意将所有级别都包括在条件中,例如@BACON写入,当前条件将覆盖currentLevel 1-9、11-34、36-49和51-59,因为10 < 10 == false10 > 10 == false。您需要在其中一个条件中包含第十级,例如10 <= 10 == true