Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么一个变量对多个值的不相等检查总是返回true?_C#_Javascript_Php_Plsql_If Statement_Language Agnostic_Control Flow_Multiple Languages_Sql_Python_Java_Java 9 - Fatal编程技术网

C# 为什么一个变量对多个值的不相等检查总是返回true?

C# 为什么一个变量对多个值的不相等检查总是返回true?,c#,javascript,php,plsql,if-statement,language-agnostic,control-flow,multiple-languages,sql,python,java,java-9,C#,Javascript,Php,Plsql,If Statement,Language Agnostic,Control Flow,Multiple Languages,Sql,Python,Java,Java 9,我的程序中有一个变量v,它可以从值集中取任何值 "a", "b", "c", ..., "z" 我的目标是只在v不是“x”、“y”、或“z”时执行一些语句 我试过了 对于类C语言(等式运算符比较实际字符串值;例如,) if(v!=“x”| v!=“y”| v!=“z”) { //我想要执行的语句 //如果v既不是“x”,也不是“y”,也不是“z” } 对于类Pascal语言(例如) 如果(v!=“x”或v!=“y”或v!=“z”),则 --我想要执行的语句 --如果v既不是“x”,也不是“

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

"a", "b", "c", ..., "z"
我的目标是只在
v
不是
“x”
“y”
、或
“z”
时执行一些语句

我试过了

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

    if(v!=“x”| v!=“y”| v!=“z”)
    {
    //我想要执行的语句
    //如果v既不是“x”,也不是“y”,也不是“z”
    }
    
  • 对于类Pascal语言(例如)

    如果(v!=“x”或v!=“y”或v!=“z”),则
    --我想要执行的语句
    --如果v既不是“x”,也不是“y”,也不是“z”
    如果结束;
    

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

使用
&
/
/
,而不是
|
/

v != "x" && v != "y" && v != "z"
问题 如果始终执行
If
块,则If块的条件始终计算为
true
。逻辑表达式一定是错的

让我们考虑<代码> v!=“x”| v!=“y”| v!=对于

v
的每个值,“z”

  • v=“x”

    v!=“x”
    变为
    “x”!=“x”
    ,这是错误的。
    v!=“y”
    变为
    “x”!=“y”
    ,这是真的。
    v!=“z”
    变为
    “x”!=“z”
    ,这是真的

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

  • v=“y”
    时,表达式变为

      "y" != "x" || "y" != "y" || "y" != "z"
    
      "z" != "x" || "z" != "y" || "z" != "z"
    
    或者
    true | | false | | true
    ,这是真的

  • v=“z”
    时,表达式变为

      "y" != "x" || "y" != "y" || "y" != "z"
    
      "z" != "x" || "z" != "y" || "z" != "z"
    
    或者
    true | | true | | false
    ,这是真的

  • 对于
    v
    的任何其他值,表达式的计算结果为
    true | 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

解决方案 您要做的是,找到一个逻辑表达式,当

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

正确的结构是,

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

    if(v!=“x”&&v!=“y”&&v!=“z”)
    {
    //我想要执行的语句
    //如果v既不是“x”,也不是“y”,也不是“z”
    }
    
  • 对于类Pascal语言

    如果(v!=“x”和v!=“y”和v!=“z”)那么
    --我想要执行的语句
    --如果v既不是“x”,也不是“y”,也不是“z”
    如果结束;
    
德摩根定律 通过,表达式也可以重写为(使用类似C的语法)

意义

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

这使得逻辑更加明显

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

  • v不在('x','y','z')

  • [“x”、“y”、“z”]索引(v)=-1

  • v不在{“x”、“y”、“z”}

  • :

  • (及以上):


  • 使用
    &
    /
    /
    ,而不是
    |
    /
    /

    v != "x" && v != "y" && v != "z"
    
    问题 如果始终执行
    If
    块,则If块的条件始终计算为
    true
    。逻辑表达式一定是错的

    让我们考虑<代码> v!=“x”| v!=“y”| v!=对于

    v
    的每个值,“z”

    • v=“x”

      v!=“x”
      变为
      “x”!=“x”
      ,这是错误的。
      v!=“y”
      变为
      “x”!=“y”
      ,这是真的。
      v!=“z”
      变为
      “x”!=“z”
      ,这是真的

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

    • v=“y”
      时,表达式变为

        "y" != "x" || "y" != "y" || "y" != "z"
      
        "z" != "x" || "z" != "y" || "z" != "z"
      
      或者
      true | | false | | true
      ,这是真的

    • v=“z”
      时,表达式变为

        "y" != "x" || "y" != "y" || "y" != "z"
      
        "z" != "x" || "z" != "y" || "z" != "z"
      
      或者
      true | | true | | false
      ,这是真的

    • 对于
      v
      的任何其他值,表达式的计算结果为
      true | 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

    解决方案 您要做的是,找到一个逻辑表达式,当

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

    正确的结构是,

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

      if(v!=“x”&&v!=“y”&&v!=“z”)
      {
      //我想要执行的语句
      //如果v既不是“x”,也不是“y”,也不是“z”
      }
      
    • 对于类Pascal语言

      如果(v!=“x”和v!=“y”和v!=“z”)那么
      --我想要执行的语句
      --如果v既不是“x”,也不是“y”,也不是“z”
      如果结束;
      
    德摩根定律 通过,表达式也可以重写为(使用类似C的语法)

    意义

    ((v为“x”)
    (v为“y”)