1

我有自己的 IF 状态,

tempNum2 = 4, tempNum2 = 3

answer1 = 1, answer2 = 3, answer3 = 2, answer4 = 4

if( (tempNum2== answer2 || tempNum1== answer2) &&
    (tempNum2!= answer1 || tempNum1!= answer1) &&
    (tempNum2!= answer4 || tempNum1!= answer4) &&
    (tempNum2!= answer3 || tempNum1!= answer3) &&
    (asnwer5 == 0))
 {
     console.log("Correct");
 }

现在查看 if 语句,tempNum2 等于 answer4,但在我的 Firefox 控制台中,它打印出正确,查看 if 语句,它应该失败。因为 tempNum2 是 4,并且 answer4 = 4,所以这个 if 语句应该失败,这个语句有什么问题?不要担心其他任何事情,我确定我的这个 if 语句是错误的。

帆布

4

4 回答 4

2

您必须拥有所有 4 个 or 子句之一,因为您在任何地方都使用 and 。另外我不知道答案 5 是什么,所以我不能说,但它也应该是真的,但它是被定义的。如果您将其更改&&||,它可能会起作用,但我不知道您尝试使用什么逻辑。

(false || false)&&
(true || true)&&
(true || false)&&
(true|| true)

false && true && true && true

我不知道您到底想要什么逻辑,但是您的代码完全按照您的要求执行。实际上:

(tempNum2== answer2 || tempNum1== answer2)

因此,除非tempNum2= tempNum1= answer2,此逻辑将始终返回 false。

于 2012-11-26T11:56:01.507 回答
1

tempnum2!= answer4 || tempNum1!=answer4总是正确的,因为 1.) tempnum2 是 3(第一行)和 2.) tempNum1 没有定义。确保您的第一行是正确的;)。

/E:您的代码中有严重的拼写错误。你应该纠正它们。

  • 您定义了 tempNum2 两次。您是说 tempNum1 和 tempNum2 吗?
  • 你已经写了(asnwer5 == 0)。你的意思是(answer5 == 0)
于 2012-11-26T11:58:16.623 回答
0

我猜你应该在第一行写tempNum1 = 4 ..

tempNum1 = 4,tempNum2 = 3

所以代码:

tempNum1 = 4, tempNum2 = 3

answer1 = 1, answer2 = 3, answer3 = 2, answer4 = 4

if( (tempNum2== answer2 || tempNum1== answer2) &&
    (tempNum2!= answer1 || tempNum1!= answer1) &&
    (tempNum2!= answer4 || tempNum1!= answer4) &&
    (tempNum2!= answer3 || tempNum1!= answer3) &&
    (asnwer5 == 0))
 {
     console.log("Correct");
 }
于 2012-11-26T11:57:56.783 回答
0
(tempNum2!= answer4 || tempNum1!= answer4) &&

这仍然评估为真,因为推测 tempNum1 未定义 - 因此不等于 answer4。

记住逻辑运算符之间的区别!或者如果只满足它的一个条件,则返回 true;在您的示例中,如果未定义某些变量,总是会得到满足 - 无论如何,关于不等式测试。

像这样使用 if() 语句的整体结构还有很多不足之处。它对可读性的影响比什么都大。我会认真考虑重构您的代码。维护它不会很有趣,调试小错误也不会有趣 - 正如您刚刚经历的那样。

于 2012-11-26T12:03:44.187 回答