使用?编写的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);
答案 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)吗?