有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

if语句为什么一个变量对多个值的非质量检查总是返回true?

我的程序中有一个变量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"
    }
    
  • 对于类似帕斯卡语的语言(例如

    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条件中的语句总是被执行。我做错什么了吗


共 (1) 个答案

  1. # 1 楼答案

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

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

    问题

    如果总是执行if块,则If块的条件总是计算为true。逻辑表达式一定是错的

    让我们考虑{{CD10}}的每个值^ {CD9>}。

    • v = "x"

      v != "x"变成"x" != "x",这是
      v != "y"变成{},这是真的
      v != "z"变成{},这是真的

      表达式的计算结果为^{,这是真的

    • 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
    

    如您所见,逻辑表达式的计算结果总是^{

    解决方案

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

    (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")
    

    意思是

    {}{}{}{}{}{}

    这使得逻辑更加明显

    特定语言

    有些语言有特定的结构来测试集合中的成员身份,也可以使用数组/列表操作