我有一个红宝石的背景和新的Java。这让我有些困惑,我做了一个非常简单的练习,我无法保存。
我的方法如下所示:
public void act()
{
while((treeLeft() == false) && (treeRight() == false))
{
move();
}
}
}
因此,通常我的代码应检查两边是否有树(treeleft == true和treeright == true),以及何时真正有两边的树停下来并且不移动。
但是,尽管左侧只有一棵树,但它却以某种方式不会移动?我怎么了
最佳答案
&&
运算符的工作方式是,首先评估左侧,如果该评估为false
,则不必担心评估右侧,因为整个表达式的结果将为false
不管右边的结果如何。因此,一旦treeLeft()计算为true,while
就会中断并停止。
正确的方法是:
while(!(treeLeft() && treeRight()))
这意味着
while
将一直循环播放,直到treeLeft()和treeRight()均评估为true为止。使用德摩根定律的替代版本:
while(!treeLeft() || !treeRight())