簡體   English   中英

檢查真或假

[英]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 ifelse子句將運行。 如果要添加其他約束(例如ab均為假),則需要使用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.

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