这个短路的if语句有什么问题
本文关键字:什么 问题 语句 if 短路 | 更新日期: 2023-09-27 18:32:47
我知道这可能真的很愚蠢,但我无法弄清楚为什么这个if语句失败:
如果我在控制台输入 1
或 2
,第一个 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
,然后转到控制台行。 我读错了这个定义吗?
这样想 - 如果它是 1,那么它不可能是 2,反之亦然。所以它肯定会是"不是 1"或"不是 2"。
你是说:
if (amOrPM != "1" && amOrPM != "2")
(如果它是"不是 1"并且它是"不是 2"。
或:
if (!(amOrPm == "1" || amOrPm == "2"))
参见德摩根定律了解更多变换。
在第二种情况下,在有效前面有 !- 你正在反转结果。删除它!他们都会表现得一样。
正确的事情是if (amOrPM != "1" && amOrPM != "2")
。如果它既不是 1 也不是 2,你想写。第二个工作是因为它否定,它是 1 或 2。
or
是一个逻辑 or。 意思是这样的:
如果输入 1,则第一个条件为 false,但第二个条件为 true,因此失败。
如果输入 2,则第一个条件为真,但第二个条件为假,因此失败。 对于他们俩来说,条件不可能是假的。