这可能是也可能不是一个愚蠢的问题,但为什么以下2个if语句会产生不同的结果
让我们说k = "z";
if (!k=="x" || !k=="y")
{
//do something
}
2
if (!(k=="x" || k=="y"))
{
//do something
}
在我看来,这两个陈述都应该点击// Do Something ....只有底部的一个才会被击中。 btw是预期的结果。
再次对不起,不过我无法解决这个问题。
答案 0 :(得分:12)
您的问题是“为什么(NOT X) OR (NOT Y)
与NOT(X OR Y)
不同?”
NOT(X OR Y)
为假,否则为真。
(NOT X) OR (NOT Y)
为假,否则为真。
“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”。
答案 1 :(得分:7)
这是因为您错过了解逻辑表达式评估。有关DeMorgans Laws的详细信息,请参阅维基百科页面,以便进一步阅读,但您需要的是这一点......
!(A || B)
与!A && !B
这不是一个非常愚蠢的问题......这是一个非常容易制作的逻辑错误,并且也很常见。
为了完整性,我还应该添加以下内容......
!A || !B
与!(A && B)