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”)
或