Oto opis problemu FizzBuzz jak stwierdzono w tym Jeff Atwood article.
Napisz program, który drukuje numery od 1 do 100. Ale dla wielokrotności trzech print „Fizz” zamiast numeru i dla wielokrotności pięciu print „Buzz”. W przypadku numerów , które są wielokrotnościami obu znaków, trzy i pięć wydrukują "FizzBuzz".
A ternary operator jest skrótem dla instrukcji if-else. Ogólny format:
cond ? evaluate_if_cond_is_true : evaluate_if_cond_is_false
Więc jeśli piszę:
int isEven = (i % 2 == 0) ? 1 : 0;
jest równoznaczne z następującym kodem:
if (i % 2 == 0) {
isEven = 1;
} else {
isEven = 0;
}
Gdzie dyr jest i % 2 == 0
, evaluate_if_cond_is_true jest 1
i evaluate_if_cond_is_false jest 0
.
Fajną cechą operatorów trójskładnikowych jest to, że można je łączyć. Oznacza to, że instrukcja do wykonania, gdy dowolny warunek zostanie zwrócony do wartości true lub false, może być kolejnym operatorem potrójnym.
Niech umieścić całą sytuację w bardziej czytelny sposób:
i%3==0 ?
i%5==0 ?
"FizzBuzz"
: "Buzz"
: i%5==0 ?
"Fizz"
: i
i mapowanie to do if-else jest łatwe z zasadami wyjaśniono powyżej:
if (i%3==0) {
if (i%5==0) {
"FizzBuzz"
} else {
"Buzz"
}
} else {
if (i%5==0) {
"Fizz"
} else {
i
}
}
To nie jest poprawny kod ale ponieważ wynik potrójnego operatora jest podkreślony w wyrażeniu wyniku, jest używany jako dane wejściowe dla polecenia puts.
Dzięki bardzo - nawias a wyjaśnienie rozwiązało ten problem – Damian