我知道这可能真的很蠢,但我无法弄清楚为什么这个if语句失败了:
如果我在控制台输入1
或2
,则第一个if语句失败,但如果我首先将结果存储在bool中,则第二个if语句会失败。为什么?我可能在这里做些蠢事吗?
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
不等于1
或amOrPM
不等于2
,则转到控制台行。我在读这个错误的定义吗?
答案 0 :(得分:7)
以这种方式思考 - 如果 1,那么它不可能是2,反之亦然。所以它肯定是 “not 1”或“not 2”。
你的意思是:
if (amOrPM != "1" && amOrPM != "2")
(如果它是“不是1”和它是“不是2”。)
或者:
if (!(amOrPm == "1" || amOrPm == "2"))
有关更多转化,请参阅De Morgan's Laws。
答案 1 :(得分:3)
你有!在第二种情况下有效前 - 你正在反转结果。删除它!他们两个都表现得一样。
答案 2 :(得分:2)
正确的事情是if (amOrPM != "1" && amOrPM != "2")
。如果它既不是1也不是2,你想写。第二个是因为它否定,它是1或2。
答案 3 :(得分:2)
或者是合乎逻辑的。这意味着什么:
如果输入1则第一个条件为假,但第二个条件为真,因此失败。
如果输入2,则第一个条件为真,但第二个条件为假,因此失败。对于他们两个人来说,这种情况永远都不是假的。