2012-05-01 66 views
1

我知道這可能是很愚蠢的,但我不明白,爲什麼這個if語句是失敗的:如果語句失敗這條短路if語句有什麼問題?

如果我在控制檯上輸入12,第一,但第二個,如果通過我首先將結果存儲在布爾中。爲什麼?我可能在這裏做些愚蠢的事情?

Console.WriteLine("Enter 1 for AM or 2 for PM?"); 
string amOrPM = Console.ReadLine(); 

//Why does this fail if I enter 1 or 2? 
if (amOrPM != "1" || amOrPM != "2") 
    Console.WriteLine("You must enter 1 for AM or 2 for PM. Try again."); 

//This works! 
bool valid = (amOrPM != "1" || amOrPM != "2"); 
if (!valid) 
    Console.WriteLine("You must enter 1 for AM or 2 for PM. Try again."); 

我只注意到了第一個if語句,我只好把& &代替||,但是這是令人困惑,因爲我把它讀作:如果amOrPm不等於1amOrPM不等於2,然後去控制檯線。我讀了這個錯誤的定義嗎?

+9

'amOrPM!=「1」|| amOrPM!=「2」'永遠是真的。你不想'如果(amOrPM!=「1」&& amOrPM!=「2」)'? –

+0

您的意思是&&? –

+2

'(amOrPM!=「1」|| amOrPM!=「2」)'與'!(amOrPM ==「1」&& amOrPM ==「2」)相同。向你學習德摩根的法律。 – Oded

回答

7

想想這樣 - 如果它 1,那麼它不可能是2,反之亦然。所以肯定是或者是「不是1」「不是2」。

你的意思是:

if (amOrPM != "1" && amOrPM != "2") 

(如果它是 「沒有1」 它的 「不2」)。

或者:

if (!(amOrPm == "1" || amOrPm == "2")) 

De Morgan's Laws更多的轉換。

+0

確定這會清除它。我猜想是什麼讓我失望的是'和'這個詞,當我看到這個時,我認爲'amOrPM'可以由於某種原因一次有2個值。 – Xaisoft

2

正確的事情是if (amOrPM != "1" && amOrPM != "2")。如果它既不是1也不是2,則要寫。第二個因爲它否定而工作,它是1或2.

3

你有!在第二種情況下有效 - 你正在反轉結果。刪除!他們都會表現一樣。

2

或者是邏輯或。這意味着這是什麼:

如果你輸入1,那麼第一個條件是錯誤的,但第二個條件是真的,因此它失敗。

如果輸入2,則第一個條件爲真,但第二個條件爲假,因此失敗。對於他們兩人來說,情況永遠不會是假的。