[英]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/SCBooleans.html
也可能給您一些有關如何重組的提示
在您的代碼中,僅當treeLeft()和treeRight()都返回false時,才會調用move()。 這意味着只要左側或右側有一棵樹,就不會調用它。 因此,您想要的是適當的:
while(!(treeLeft() && treeRight()))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.