2016-09-25 4 views
-1

Вот код:Javascript FizzBuzz /, если другое заявление

var i = 0; 
for (i = 1; i <= 20; i++) { 
    if (i % 5 === 0 && i % 3 === 0) { 
     console.log("FizzBuzz"); 
    } else if (i % 5 === 0) { 
     console.log("Buzz"); 
    } else if (i % 3 === 0) { 
     console.log("Fizz"); 
    } else { 
     console.log(i); 
    } 
} 

и это выход:

1 
2 
Fizz 
4 
Buzz 
Fizz 
7 
8 
Fizz 
Buzz 
11 
Fizz 
13 
14 
FizzBuzz 
16 
17 
Fizz 
19 
Buzz 

Код нормально и работает хорошо, но я не понять, почему он печатает только FizzBuzz, когда логический оператор & & находится в if, а не в else if?

+2

Поскольку, когда условие истинно, оно не переходит к следующему условию. Используйте несколько ifs, если вы хотите, чтобы – Li357

ответ

3

После того, как одно из условий в if (...)/else if (...) является true (сверху вниз), остальные условия не вычисляются, и программа переходит к следующему циклу (следующая i) значение.

Если поменять порядок:

var i = 0; 
for (i = 1; i <= 20; i++) { 
    if (i % 5 === 0) { 
     // This evaluates to true for a number that is multiple of 5 and 3, and it prints "Buzz", and goes into the next loop. 
     console.log("Buzz"); 
    } else if (i % 5 === 0 && i % 3 === 0) { 
     console.log("FizzBuzz"); 
    } else if (i % 3 === 0) { 
     console.log("Fizz"); 
    } else { 
     console.log(i); 
    } 
} 

Если вы ищете более короткий вариант FizzBuzz, вот интересный ответ Пола ирландцев (добавлены дополнительные кронштейны для ясности):

for (var i = 1; i <= 100; i++) { 
    var f = i % 3 == 0, b = i % 5 == 0; 
    console.log(f ? (b ? "FizzBuzz" : "Fizz") : (b ? "Buzz" : i)); 
} 

Источник: https://gist.github.com/jaysonrowe/1592432#gistcomment-790724

Смежные вопросы