1

これはおそらく本当にばかげていることはわかっていますが、この if ステートメントが失敗する理由がわかりません。

1コンソールにorを入力する2と、最初の if ステートメントは失敗しますが、最初に bool に結果を格納すると、2 番目のステートメントは成功します。なんで?私はおそらくここでばかげたことをしていますか?

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.");

amOrPm最初の if ステートメントで、|| の代わりに&&を配置1するamOrPM必要があることに気付きましたが、これは次のように読むため混乱し2ます。私はこの間違った定義を読んでいますか?

4

4 に答える 4

7

このように考えてみてください。1 の場合、2 になることあり得ません。逆もまた同様です。したがって、それは間違いなく「1ではない」または「2ではない」のいずれかになります。

もしかして:

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

(「1 以外」「2 以外」の場合)

または:

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

その他の変換については、ド モルガンの法則を参照してください。

于 2012-05-01T19:31:39.880 に答える
3

あなたが持っている!2 番目のケースでは有効の前に、結果を反転しています。それを削除してください!どちらも同じように動作します。

于 2012-05-01T19:32:43.127 に答える
2

正しいのはif (amOrPM != "1" && amOrPM != "2"). 1 でも 2 でもない場合に書きたいとします。

于 2012-05-01T19:32:03.883 に答える
2

Or は論理和です。これが意味することは次のとおりです。

1 を入力すると、最初の条件は false ですが、2 番目の条件は true であるため、失敗します。

2 を入力すると、最初の条件は true ですが、2 番目の条件は false であるため、失敗します。両方の条件が false になることはありません。

于 2012-05-01T19:33:49.240 に答える