你能像这样连续使用一堆或吗?
if (x==0||7||14||21||-7||-14){y=THURSDAY;}
它似乎对我不起作用。怎么了?可以|| 不能用于具有相同 then 谓词的两个 else if 条件?
你能像这样连续使用一堆或吗?
if (x==0||7||14||21||-7||-14){y=THURSDAY;}
它似乎对我不起作用。怎么了?可以|| 不能用于具有相同 then 谓词的两个 else if 条件?
在 c 中,除 0 以外的任何值都被视为布尔值。所以你的 if 可以读成这样:如果 x==0 或 true 或 true 或 true ......你可能的意思是if (x==0 || x==7 || x==14 ...)
所有的答案都是正确的..但重要的是为什么......当使用布尔表达式时,你不能让编译器假设 if(x == 0 || .... < 指的是同一个变量),因此你应始终指定您正在评估的变量。
if(x == 0 || x == 7 || ...) { ... }
此外,这是真的,大多数编。语言有它们的简写,例如在 c 中,任何不是 0 的都是正确的,但同样不适用于 java;用速记区分基础知识时要非常小心。
问候
您可以使用一堆 if,但由于存在重复模式,因此模数之类的东西更合适。IE
if( x>= -14 && x<= 21 && (x %7) == 0)
表达方式
x == 0||7||14||21||-7||-14
不是简写_
x == 0 || x == 7 || x == 14 || ...
相反,它与表达式的结果x
进行比较,结果为1。 0 || 7 || 14 || ...
请记住,||
运算符首先评估其左操作数;如果它是 0 值,则计算正确的操作数。如果两个操作数都是 0 值,则表达式的计算结果为 0(假)。如果左侧操作数非零,则表达式的计算结果为 1 (true),而右侧操作数根本不计算。
基本上,您的代码被评估为
x == 0 || (7 || (14 || (21 || (-7 || -14))))
左操作数为 0,因此我们计算右操作数(子表达式(7 || (14 || (21 ||...)
。由于7
非零,表达式计算结果为 1(不计算剩余操作数)。
如果要x
针对多个值进行测试,则需要编写多个相等表达式,如
if (x == 0 || x == 7 || x == 14 || ...)
将 if 语句更改为以下内容:
if (x==0 || x==7 || x==14 || x==21 || x==-7 || x==-14)
{
y=THURSDAY;
}
您不能一次针对多个值测试一个变量。
在C
中,出于布尔逻辑的目的,所有非零值都评估为真。因此,原始or
语句中的每个数字都代表它自己的条件。所以7
评估为真,并且条件得到满足。
尝试
if (x==0||x==7||x==14||x==21||x==-7||x==-14)
{
y=THURSDAY;
}
您编写它的方式,7,14.. 将被评估为 true。
0 为假,其余为真。