我使用三元运算符进行比较和计算,但它没有给出期望的结果。 我错过了什么或做错了什么?
int x = 600000;
x = (x > 250000 && x < 500000 ?
(x > 500000 && x < 1000000 ?
(x > 1000000 ?
x = (x / 100) * 30 :
x = (x / 100) * 20) :
x = (x / 100) * 10):
x);
我想实现这个目标:
if (x > 250000 && x < 500000)
{
x = (x / 100) * 10;
}
else if (x > 500000 && x < 1000000)
{
x = (x / 100) * 20;
}
else if (x > 1000000)
{
x = (x / 100) * 30;
}
答案 0 :(得分:1)
x = (x > 250000 && x < 500000) ? (x / 100) * 10 : ((x > 500000 && x < 1000000) ? (x / 100) * 20 : ((x > 1000000) ? (x / 100) * 30 : x));
(conditional) ? expr1 : expr2
格式的三元运算符应显示为if conditional then expr1 otherwise expr2
。
答案 1 :(得分:0)
首先让我警告你,这样的长三元操作通常没有规定,因为如果有任何修改,它将来只会引起问题。不过,以下内容将满足要求:
int x = 600000;
x = (x > 250000 && x < 500000) ? ((x / 100) * 10): ((x > 500000 && x < 1000000) ? ((x / 100) * 20): (x > 1000000) ? ((x / 100) * 30):x);
答案 2 :(得分:0)
您级联if-then-else
错误。 else if
是else
的一部分。因此表达式是:
x = (x > 250000 && x < 500000) ?
(x / 100) * 10 :
((x > 500000 && x < 1000000) ?
(x / 100) * 20 :
((x > 1000000) ?
(x / 100) * 30 ) :
x
)
)
);
但我不明白你为什么要在这些复杂的陈述中使用三元运算符。他们不会产生任何性能提升。三元运算符主要用于没有(或没有太多)级联的小表达式。
背景资料
else if
实际上是if
级联到else
,因此:
if (x > 250000 && x < 500000) {
x = (x / 100) * 10;
}
else if (x > 500000 && x < 1000000) {
x = (x / 100) * 20;
}
else if (x > 1000000) {
x = (x / 100) * 30;
}
实际上是:
if (x > 250000 && x < 500000) {
x = (x / 100) * 10;
}
else {
if (x > 500000 && x < 1000000) {
x = (x / 100) * 20;
}
else {
if (x > 1000000) {
x = (x / 100) * 30;
}
}
}
答案 3 :(得分:0)
如果您缩进代码,则可以更轻松地查看正在进行的操作
x = (x > 250000 && x < 500000
? (x > 500000 && x < 1000000
? (x > 1000000
? x = (x / 100) * 30
: x = (x / 100) * 20)
: x = (x / 100) * 10)
:x);
这转换为以下if-else
语句:
if (x > 250000 && x < 500000)
{
if (x > 500000 && x < 1000000)
{
if (x > 1000000)
{
x = (x / 100) * 30;
}
else
{
x = (x / 100) * 20;
}
}
else
{
x = (x / 100) * 10;
}
}
else
{
x = x;
}
很明显,如果满足x > 250000 && x < 500000
,那么它将永远不会到达第二个if语句。