-5

你能像这样连续使用一堆或吗?

 if (x==0||7||14||21||-7||-14){y=THURSDAY;}

它似乎对我不起作用。怎么了?可以|| 不能用于具有相同 then 谓词的两个 else if 条件?

4

6 回答 6

6

在 c 中,除 0 以外的任何值都被视为布尔值。所以你的 if 可以读成这样:如果 x==0 或 true 或 true 或 true ......你可能的意思是if (x==0 || x==7 || x==14 ...)

于 2012-12-29T14:15:48.820 回答
2

所有的答案都是正确的..但重要的是为什么......当使用布尔表达式时,你不能让编译器假设 if(x == 0 || .... < 指的是同一个变量),因此你应始终指定您正在评估的变量。

if(x == 0 || x == 7 || ...) { ... }

此外,这是真的,大多数编。语言有它们的简写,例如在 c 中,任何不是 0 的都是正确的,但同样不适用于 java;用速记区分基础知识时要非常小心。

问候

于 2012-12-29T14:32:37.107 回答
2

您可以使用一堆 if,但由于存在重复模式,因此模数之类的东西更合适。IE

if( x>= -14 && x<= 21 && (x %7) == 0)
于 2012-12-29T14:21:01.507 回答
2

表达方式

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 || ...)
于 2012-12-29T15:28:35.693 回答
1

将 if 语句更改为以下内容:

if (x==0 || x==7 || x==14 || x==21 || x==-7 || x==-14)
{
  y=THURSDAY;
}

您不能一次针对多个值测试一个变量。

C中,出于布尔逻辑的目的,所有非零值都评估为真。因此,原始or语句中的每个数字都代表它自己的条件。所以7评估为真,并且条件得到满足。

于 2012-12-29T14:15:46.527 回答
1

尝试

 if (x==0||x==7||x==14||x==21||x==-7||x==-14)
    {
     y=THURSDAY;
    }

您编写它的方式,7,14.. 将被评估为 true。

0 为假,其余为真。

于 2012-12-29T14:15:53.547 回答