我们可以使用“吗?”运算符,而不是如果嵌套条件?

时间:2019-07-19 11:27:15

标签: java if-statement nested-if

使用?编写的if嵌套条件。 : 句法。这是不允许的情况吗?

下面是代码

        int i=(10>5)?(2<5)?230:456;
        System.out.println("i="+i);

我以为等于

if(10>5){
   if(2<5){
        i=230;
   }
   else{
       i=456;
   }
}

我的想法是将对前10> 5进行评估,确实如此,然后它将验证是否为2 <5。现在,由于这也是事实,因此应将“ i”分配给230。 错误消息是

ControlFlow.java:10: error: : expected
        int i=(10>5)?(2<5)?230:456;

ControlFlow.java:10: error: ';' expected
        int i=(10>5)?(2<5)?230:456;
                                   ^
ControlFlow.java:11: error: illegal start of expression
        System.out.println("i="+i);
              ^
ControlFlow.java:11: error: ';' expected
        System.out.println("i="+i);

5 个答案:

答案 0 :(得分:1)

您忘记添加表达式的一部分。尝试如下操作:

int i = (10>5) ? ( (2<5) ? 230:456 ) : 0; 

在第一个条件(10>5)为假时,将上面的0替换为您希望变量成为的期望数字。

答案 1 :(得分:1)

三元运算符具有语法

aBoolean ? value : value

它将自身返回一个值,因此您可以将它们嵌套为

aBoolean ? (aBoolean ? value : value) : value

您的代码(10>5)?(2<5)?230:456;等同于

aBoolean ? (aBoolean ? value : value)

因此它缺少您的第一个三元运算符的第二个值。

答案 2 :(得分:1)

您可以寻求以下解决方案。但是,今天不建议这样做,因为在当今行业中,源代码的认知复杂性是一个相当大的问题。根据您共享的逻辑,可以通过以下两种方式实现相同的目的。

 int i=(10>5) && (2<5)?230:456;
    System.out.println("i="+i);


 int i = (10>5)?(2<5)?230:456:0;
    System.out.println("i="+i);

答案 3 :(得分:1)

有时候重新安排条件可能更容易理解。

代替

int v = (a > b) ? (c > d) ? 100 : 200 : 300;

你可以

int v = (a <= b) ? 300 : (c > d) ? 100 : 200;

唯一的区别是在后一种情况下,初始条件为true时立即返回一个值,而为false时需要进一步评估。

答案 4 :(得分:0)

是的,您可以将三元运算符嵌套到if条件之后的最深处,但是,三元运算符是IF条件的精简版本,如果您将其更深地压缩,它们会使您的代码不可读。

只需记住将条件括起来以使其易于阅读,但这不是必需条件(0 <1)吗?