[英]checking for both true or both false
如果我有以下邏輯來檢查真或假,但忽略其他,我寫:
if (a) {
if (b) {
// do something when both true
}
} else if (!b) {
// do something when both false
}
這是用Java寫的最簡單的嗎?
我當然可以寫
if (a && b) {
// do something when both true
} else if (!a && !b) {
// do something when both false
}
但是我在想是否有可能僅使用一個if條件而其他條件則沒有條件,例如
if (some condition) {
// do something when both true
} else { // <-- check! only else, no more condition
// do something when both false
}
當然,不可能是對此問題的可接受答案(如果附有解釋)
謝謝
抱歉,我對XOR的最初回答是-您讀錯了我的問題。 正確的答案是
在Java中是不可能的。
原因是布爾邏輯之一。 當您有兩個邏輯A和B時,有四個可能的狀態:
A B
0 0 << A and B are false
0 1
1 0
1 1 << A and B are true
當您有一個條件說“ A和B都為真”時,您只有最后一個狀態。 不幸的是,“其他”(所有其他)包含三個可能的狀態。 對於一個狀態,您不能擁有正確的事物,對於另一種狀態,則不能擁有虛假的事物,而對於另外兩種狀態,則不能擁有“別的事物”。 這不是布爾代數的工作方式。
答案是否定的 。 您不能擁有僅在特定條件下運行的else
子句,而不能使用else if
。 每當if
子句中的條件為false時,不else if
的else
子句將運行。 如果要添加其他約束(例如a
和b
均為假),則需要使用else if
。
但是,使用else if
並沒有錯,這使您的意圖相當清楚:
if (a && b) {
} else if (!a && !b) {
}
您希望以不同的方式處理三種狀態-盡管一種情況是“什么也不做”。
if ( a && b )
{
// Do something when both are true.
}
else if ( ! a && ! b )
{
// Do something if both are false.
}
這是完成您想要實現的目標的最經濟的方法-三種情況下進行兩次測試。
另外,如果您可以從“布爾值”或表達式中返回0或1,則可以執行以下操作:
switch ( a + b )
{
case 0:
// Do something when both a and b are "false."
break;
case 1:
// Do something -- or nothing -- when a or b are "false" and the other is "true."
break;
case 2:
// Do something when both a and b are "true."
break;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.