FizzBuzz в Javascript: код не будет выполняться или печатать вообще

Я поиграл с проблемой FizzBuzz, и мне интересно, почему следующий код не будет выполнен, на консоль ничего не выводится.

var i = 0;
while (i = 0, i < 100, i++ ) {
    if ( i % 3 === 0) {
        console.log("Fizz");
    } else if ( i % 5 === 0) { 
        console.log("Buzz");
    } else {
        console.log(i);
    } 
}

Что мне не хватает?

2 ответа

Решение

Вы использовали неправильную циклическую конструкцию. Это должно быть forне while, Также обратите внимание, что между предложениями стоит точка с запятой, а не запятая:

for (i=0; i < 100; i++) {

Что у вас есть это:

while (i = 0, i < 100, i++) {

Запятая просто оценивает левую сторону, отбрасывает результат, а затем оценивает правую сторону. Так что устанавливает i до 0 (и отбрасывает нулевое значение, возвращаемое присваиванием), тесты, которые i меньше 100 (но ничего не делает с истинным значением, возвращенным сравнением), и использует значение последнего выражения (i++) как условие цикла для while, поскольку i 0, что неверно, тело цикла никогда не выполняется.

Обратите внимание, что если бы вы использовали ++i вместо этого это не будет иметь никакого значения в for дело, но ваш while версия будет зациклена навсегда, а не работать вообще, так как i был бы уже увеличен до 1 в первый раз, когда он был проверен на правдивость.

Я считаю, что вы просто путаете способ создания циклов "для" и "пока". Вы создали свое "время", как если бы вы "за"!

Подумайте об этом так: когда вы пишете цикл while, вот так:

while(i<100) {

Вы говорите, пока (это условие верно). Все, что вам нужно между скобками, - это утверждение, чтобы определить, правда это или нет. Где-то в цикле вам (обычно) нужно будет изменить значение i, или вы (вероятно) получите бесконечный цикл.

Теперь для цикла for нам понадобится больше информации между скобками... нам понадобится вся информация, которая определяет количество циклов, которые мы возьмем. Точно так же, как вы написали это там, мы пишем для (когда моя переменная равна этому; цикл до тех пор, пока это условие не станет истинным; измените переменную следующим образом).

Как правило, это означает, что "while" обеспечивает большую гибкость в определении логики вашего цикла, но цикл "for", вероятно, проще всего читать.

Другие вопросы по тегам