有条件的三元运作

时间:2015-06-04 22:08:59

标签: java ternary

首先,我最近遇到了这个问题,并且无法找到一个好的解释:

int x = (30 > 15)?(14 > 4) ? 1 : 0 : 2; 

我之前使用过三元表达式,所以我熟悉它们,说实话我甚至不知道该怎么称呼这个表达式...我认为它会像这样分解

if (con1) or (con2) return 1         // if one is correct     
if (!con1) and (!con2) return 0      // if none are correct     
if (con1) not (con2) return 2        // if one but not the other

就像我说的那样,我真的不知道,所以我可以在一百万英里之外。

2 个答案:

答案 0 :(得分:4)

它是int x = (30 > 15)?((14 > 4) ? 1 : 0): 2;

if (30 > 15) {
    if (14 > 4) 
        x = 1;
    else 
        x = 0;
} else {
    x = 2;
}

答案 1 :(得分:4)

由于operator precedence in Java,此代码为:

int x = (30 > 15)?(14 > 4) ? 1 : 0 : 2;

将被解析,就像它被括号括起来一样:

int x = (30 > 15) ? ((14 > 4) ? 1 : 0) : 2;

(优先级低于三元?:的唯一运算符是各种赋值运算符:=+=等。)您的代码可以口头表达为:

  • if(con1)和(con2)将1分配给x
  • if(con1)和(not con2)将0分配给x
  • 否则将2分配给x

编辑:嵌套的三元运算符通常以特殊的方式格式化,以使整个事物更容易阅读,特别是当它们超过两个深度时:

int x = condition_1 ? value_1     :
        condition_2 ? value_2     :
          .
          .
          .
        condition_n ? value_n     :
                      defaultValue; // for when all conditions are false

如果你想为其中一个“?”部分使用三元表达式,那么这种方法并不干净。反转条件意义以保持嵌套在“:”部分是很常见的,但有时你需要在两个分支中嵌套。因此,您的示例声明可以重写为:

int x = (30 <= 15) ? 2 :
        (14 > 4)   ? 1 :
                     0 ;