Вот описание проблемы FizzBuzz, как указано в этой статье Джеффа Этвуда .
Напишите программу, которая печатает
цифры от 1 до 100. Но для
кратные три печати "Fizz"
вместо числа и для
кратные пяти печатать «Базз». За
числа, которые кратны обоим
три и пять печатать «FizzBuzz».
A троичный оператор - это сокращенная запись для оператора 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
,valu_if_cond_is_true - 1
, а valu_if_cond_is_false - 0
.
Приятной особенностью троичных операторов является то, что их можно комбинировать. Это означает, что оператор, выполняемый, когда любое условие оценивается как true или false, может быть другим троичным оператором.
Позвольте изложить все условие более читабельным образом:
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
}
}
Это недопустимый код, но поскольку результат троичного оператора указывается в выражении результата, он используется в качестве входных данных для команды Put.