gpt4 book ai didi

if-statement - 为什么针对多个值对一个变量进行非等式检查总是返回 true?

转载 作者:行者123 更新时间:2023-12-03 13:25:43 25 4
gpt4 key购买 nike

我有一个变量 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/or :

    v != "x" && v != "y" && v != "z"
    问题
    如果 if块总是被执行,if 块的条件总是计算为 true .逻辑表达式一定是错误的。
    让我们考虑一下 v != "x" || v != "y" || v != "z"对于 v 的每个值.
  • v = "x" ,v != "x"变成 "x" != "x" ,这是错误的。
    v != "y"变成 "x" != "y" ,这是真的。
    v != "z"变成 "x" != "z" ,这是真的。
    表达式的计算结果为 false || true || true ,这是真的。
  • v = "y" ,表达式变为
      "y" != "x" || "y" != "y" || "y" != "z"
    true || false || true ,这是真的。
  • v = "z" ,表达式变为
      "z" != "x" || "z" != "y" || "z" != "z"
    true || true || false ,这是真的。
  • 对于 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 is not "x") and (v is not "y") and (v is not "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")
    意义
    not ((v is "x") or (v is "y") or (v is "z")) .
    这使得逻辑更明显一些。
    特定语言
    某些语言具有用于测试集合成员资格的特定构造,或者您可以使用数组/列表操作。
  • :v NOT IN ('x', 'y', 'z')
  • :["x", "y", "z"].indexOf(v) == -1
  • :v not in {"x", "y", "z"}
  • : !Arrays.asList("x", "y", "z").contains(v)
  • (及以上): !Set.of("x", "y", "z").contains(v)
  • 关于if-statement - 为什么针对多个值对一个变量进行非等式检查总是返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26337003/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com