簡體   English   中英

評估兩個陳述是否為假

[英]Evaluate if both statements are false

我有一個紅寶石的背景和新的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())

&&運算符計算為false隨時隨地任一值是false

|| 操作評估為false ,只有當這兩個值是false ,並可能是你需要在這種情況下使用什么。

while(!treeLeft() || !treeRight()) { /*do stuff*/ }

為了清楚起見(我不熟悉Ruby)... !treeLeft()!treeLeft()完全相同treeLeft() == false

我認為您正在尋找|| (或)運算符。 為此,兩個陳述都必須為真。 按照目前的情況,如果第一個語句為true,則將結束循環。

如果您試圖短路以在左樹上放置首選項,則將其放在while循環條件中。 重要的是要記住,這些是按順序評估的。 短路可能非常有用。 如果需要解釋, 查看以下內容: https : //www.student.cs.uwaterloo.ca/~cs132/Weekly/W02/SCBool​​eans.html

也可能給您一些有關如何重組的提示

在您的代碼中,僅當treeLeft()和treeRight()都返回false時,才會調用move()。 這意味着只要左側或右側有一棵樹,就不會調用它。 因此,您想要的是適當的:

while(!(treeLeft() && treeRight())) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM