条件三元运算
Conditional Ternary Operations
首先,我最近遇到了这个问题,但一直找不到很好的解释:
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
就像我说的,我真的不知道,所以我可能在一百万英里之外。
是int x = (30 > 15)?((14 > 4) ? 1 : 0): 2;
:
if (30 > 15) {
if (14 > 4)
x = 1;
else
x = 0;
} else {
x = 2;
}
因为operator precedence in Java,这段代码:
int x = (30 > 15)?(14 > 4) ? 1 : 0 : 2;
将被解析为括号如下:
int x = (30 > 15) ? ((14 > 4) ? 1 : 0) : 2;
(优先级低于三元 ?:
的唯一运算符是各种赋值运算符:=
、+=
等)您的代码可以口头表达为:
- 如果 (con1) 和 (con2) 将 1 赋值给 x
- if (con1) and (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 ;
首先,我最近遇到了这个问题,但一直找不到很好的解释:
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
就像我说的,我真的不知道,所以我可能在一百万英里之外。
是int x = (30 > 15)?((14 > 4) ? 1 : 0): 2;
:
if (30 > 15) {
if (14 > 4)
x = 1;
else
x = 0;
} else {
x = 2;
}
因为operator precedence in Java,这段代码:
int x = (30 > 15)?(14 > 4) ? 1 : 0 : 2;
将被解析为括号如下:
int x = (30 > 15) ? ((14 > 4) ? 1 : 0) : 2;
(优先级低于三元 ?:
的唯一运算符是各种赋值运算符:=
、+=
等)您的代码可以口头表达为:
- 如果 (con1) 和 (con2) 将 1 赋值给 x
- if (con1) and (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 ;