if-statement - 为什么一个变量与多个值的不相等检查总是返回 true?

标签 if-statement language-agnostic logical-operators control-flow demorgans-law

我的程序中有一个变量v,它可以从值集中获取任何

"a", "b", "c", ..., "z"

我的目标是仅当 v 不是 "x""y""时才执行某些语句z”

我已经尝试过了,

  • 对于类 C 语言(其中相等运算符比较实际字符串值;例如 )

    if (v != "x" || v != "y" || v != "z")
    {
        // the statements I want to be executed
        // if v is neither "x", nor "y", nor "z"
    }
    
  • 对于类似 Pascal 的语言(例如 )

    IF (v != 'x' OR v != 'y' OR v != 'z') THEN
        -- the statements I want to be executed
        -- if v is neither "x", nor "y", nor "z"
    END IF;
    

if 条件内的语句始终会被执行。我做错了什么吗?

最佳答案

使用&&/AND/and,而不是||/OR/:

v != "x" && v != "y" && v != "z"

问题

如果始终执行 if block ,则 if block 的条件始终计算为 true。逻辑表达式一定是错误的。

让我们考虑v != "x"|| v != "y"|| v != "z" 对于 v 的每个值。

  • v = "x"时,

    v != "x" 变为 "x"!= "x",这是 false
    v != "y" 变为 "x"!= "y",这是true
    v != "z" 变为 "x"!= "z",这是true

    表达式的计算结果为false ||真实 || true,即true

  • v = "y"时,表达式变为

      "y" != "x" || "y" != "y" || "y" != "z"
    

    true ||假|| true,即true

  • v = "z"时,表达式变为

      "z" != "x" || "z" != "y" || "z" != "z"
    

    true ||真实 || false,即true

  • 对于 v 的任何其他值,表达式的计算结果为 true ||真实 || true,即true

或者,考虑真值表:

       │     A          B          C      │
  v    │  v != "x"   v != "y"   v != "z"  │  A || B || C
───────┼──────────────────────────────────┼──────────────
 "x"   │    false      true       true    │     true
 "y"   │    true       false      true    │     true
 "z"   │    true       true       false   │     true
other  │    true       true       true    │     true

如您所见,您的逻辑表达式始终计算结果为true

解决方案

你想要做的是,找到一个逻辑表达式,当

时,其值为true

(v 不是“x”)并且(v 不是“y”)(v 不是“z”)

正确的结构是,

  • 对于类 C 语言(例如 -(可能需要严格相等运算符 !==)、 )

      if (v != "x" && v != "y" && v != "z")
      {
          // the statements I want to be executed
          // if v is neither "x", nor "y", nor "z"
      }
    
  • 对于类似 Pascal 的语言

      IF (v != 'x' AND v != 'y' AND v != 'z') THEN
          -- the statements I want to be executed
          -- if v is neither "x", nor "y", nor "z"
      END IF;
    

德摩根定律

作者:De Morgan's law ,表达式也可以重写为(使用类似 C 的语法)

!(v == "x" || v == "y" || v == "z")

含义

不是((v是“x”)(v 是“y”)(v 是“z”))

这使得逻辑更加明显。

特定语言

某些语言具有用于测试集合中的成员资格的特定构造,或者您可以使用数组/列表操作。

关于if-statement - 为什么一个变量与多个值的不相等检查总是返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44854420/

相关文章:

php - WordPress php : Way to test if pages are children of a parent page?

linux - awk 如果表达式创建 0 和 1 而不是预期结果

algorithm - 谜语: How to change matrix color?

windows - 以任何首选语言关闭连接在 LAN 中的远程计算机

c# - If 语句和 && 或 ||

php - 检查变量是否不同于多个值

c - 如何在C中读取并保存txt的可变部分

java - 将设置存储在数据库中

python - Python中字符串数组的逻辑运算

c# - &&= 和 ||= 运算符