2014-04-28 38 views
-1

這可能是也可能不是一個愚蠢的問題,但爲什麼會在以下2 if語句導致不同如果報表工作不同則預計

可以說k = "z";

  1. if (!k=="x" || !k=="y")

    {

    //do something

    }

2.

if (!(k=="x" || k=="y")) 

{ 

//do something 

} 

在我的腦海裏這兩個語句應該打//做一些事情....只是一個底部將真正受到打擊。其中btw是預期的結果。

對不起,但是我不能把我的無知的想法包裹在這。

+4

'=!= =='........ – zerkms

+1

不同的是,第二個例子編譯,而第一個不編譯... –

+0

是的,抱歉不好的例子,但在我身邊im檢查k.contains(「」)在哪種情況下你不想使用=!= == ... –

回答

12

你的問題是「爲什麼是NOT(X OR Y)(NOT X) OR (NOT Y)有什麼不同?」

NOT(X OR Y)如果X或Y爲真,則爲false,否則爲true。

(NOT X) OR (NOT Y)如果X和Y都爲真,則爲false,否則爲true。

「X或Y爲真」和「X和Y都爲真」是不同的。

這裏是一個很好的技術,當你感到困惑:畫一個真值表:

X Y NOT X NOT Y X OR Y (NOT X) OR (NOT Y) NOT(X OR Y) 
T T  F   F  T    F    F 
T F  F   T  T    T    F 
F T  T   F  T    T    F 
F F  T   T  F    T    T 

現在是明確表示,他們有什麼不同?

如果您現在繪製NOT(X AND Y)的真值表,您會發現它與(NOT X) OR (NOT Y)相同,因此這兩個表達式是等效的。

如果您繪製了真實表(NOT X) AND (NOT Y),您會發現它與NOT(X OR Y)相同。再次,這兩個表達式是等價的。

確保這一點很清楚。

現在,你在這裏有一個更大的問題:

k != "x" || k != "y" 

這謂詞不能是任何東西,但卻是事實。假設k是「x」。那麼它顯然不是「y」,所以謂詞是真實的。假設k是「y」。那麼它顯然不是「x」,所以謂詞是真實的。假設k是任何其他值。那麼它顯然既不是「x」也不是「y」,所以謂詞是真實的。所以無論如何,這是真實的。 (NOT X) OR (NOT Y)確實不是的意思是「既不是X也不是Y」。

7

這是因爲你是小姐 - 理解邏輯表達式評估。請參閱Wikipedia頁面DeMorgans Laws進一步閱讀,但你需要的是該位的要點...

!(A || B)相同!A && !B

這是不是一個真正的愚蠢的問題......這是一個非常簡單的邏輯錯誤,以及相當普遍。

爲了完整,我要補充以下,以及...

!A || !B相同!(A && B)