我有一个红宝石的背景和新的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())

09-11 12:49