这是什么意思?
我有理解这个问题,因为我没有使用这种格式。
任何人都可以翻译这种情况吗?
(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);
答案 0 :(得分:2)
这是两个三元运营商。三元运算符将if-else语句压缩为一行。 (expression ? fireOnTrue() : fireOnFalse())
例如
if(D == 4) {
explode();
} else {
explodeTwice();
}
可以写成:
D == 4 ? explode() : explodeTwice()
因此,如果我们采用(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);
并将其细分,我们会得到:
if(D == 4) {
(i % 2 == 0 ? 10 : 14);
} else
10;
}
再向下打破一步:
if(D == 4) {
if(i % 2 == 0) {
10;
} else {
14;
}
} else
10;
}
答案 1 :(得分:1)
让我们一块一块地看看那个怪物。
(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)
此行使用ternary operator x ? y : z
,返回
y
if x == true
z
if x == false
(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)
首先检查D
是否等于4
:
D
等于4
,则返回(i % 2 == 0 ? 10 : 14)
D
不等于4
则会返回10
。如果D
恰好等于4
,那么将解析表达式(i % 2 == 0 ? 10 : 14)
:
(i % 2 == 0 ? 10 : 14)
首先检查i % 2 == 0
是真还是假。 %
是剩余的又名模运算符,它返回a % b
的除法的余数a / b。
将结果与0
进行比较与说“均匀划分”相同,即没有余数。
除以2
的余数可以是0
或1
,因此:
0
如果i
是偶数1
如果i
是奇数换句话说,如果(i % 2 == 0 ? 10 : 14)
为偶数,10
将返回i
,如果14
为奇数,则会i
。
总之,(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)
可以评估为10
或14
,具体取决于D
和i
,如下所示:
D == 4
和i
为偶数,则评估为10
D == 4
和i
为奇数,则评估为14
D != 4
,则评估为10
因此,表达式可以简化为一种方法:
int return10or14(int D, int i) {
if (D != 4 || i % 2 == 0)
return 10;
else
return 14;
}
答案 2 :(得分:0)
表达式? b:c只表示如果(a)则b,否则c。 因此,假设您的表达式计算为retval,它可以写成:
if(D == 4)
{
if(i%2 == 0)
retval = 10;
else
retval = 14;
}
else retval = 10;