这是因为在这个Jeff Atwood article规定的FizzBuzz问题的说明。
编写打印 编号从1到100但对于三种打印“菲斯” 而不是数量 倍数和五个打印“嗡嗡”的 倍数的程序。 数字是 三个和五个打印“FizzBuzz”的倍数。
A ternary operator是写if-else语句的简写。一般格式为:
cond ? evaluate_if_cond_is_true : evaluate_if_cond_is_false
所以,如果我写:
int isEven = (i % 2 == 0) ? 1 : 0;
等同于下面的代码:
if (i % 2 == 0) {
isEven = 1;
} else {
isEven = 0;
}
其中cond是i % 2 == 0
,evaluate_if_cond_is_true是1
和evaluate_if_cond_is_false是0
。
关于三元运算符的好处是它们可以合并。这意味着当条件评估为真或假时执行的语句可以是另一个三元操作符。
让我们把整个情况更加易于阅读的时尚:
i%3==0 ?
i%5==0 ?
"FizzBuzz"
: "Buzz"
: i%5==0 ?
"Fizz"
: i
这映射到if-else语句很容易与上述规则:
if (i%3==0) {
if (i%5==0) {
"FizzBuzz"
} else {
"Buzz"
}
} else {
if (i%5==0) {
"Fizz"
} else {
i
}
}
这不是有效的代码但是因为三元运算符的结果在结果表达式中被内联,所以它被用作puts命令的输入。
非常感谢 - 括号和你的解释已经解决了这个问题 – Damian 2008-10-22 09:58:32