2016-02-05 3 views
-1

Это мой код. Я не получаю никаких писем Fizz. Я получаю только цифры. Может ли кто-нибудь объяснить, почему? БлагодаряПочему нет распечатки fizzbuzz?

printOut = ""; 

for (var x=1; x < 101 ; x++) { 


    switch(x) { 

     case((x%3) == 0): 
     printOut+="\n"+ "Fizz" ; 
     break; 

     case((x%5) == 0): 
     printOut+="\nBuzz"; 
     break; 

     default: 
     printOut+="\n" + x ; 
     break; 

    } 

} 
console.log(printOut); 
+1

Это не правильный синтаксис 'переключателя/case': https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch –

+0

Чтобы быть конкретными,' case' принимает только значения, сравниваемые с выражением в предложении 'switch'. Вы не можете динамически оценивать значение 'case', как это. –

ответ

0

Вы используете инструкцию switch неправильно. Каждый case (value): в основном должен запускаться всякий раз, когда x равно value.

Чтобы решить эту проблему, просто удалите switch оператор целиком и заменить if с для каждого case:

for (var x = 1; x < 101; x++) { 
    if ((x % 3) == 0) 
     printOut += "\n" + "Fizz"; 
    else if ((x % 5) == 0) 
     printOut += "\nBuzz"; 
    else 
     printOut += "\n" + x; 
} 
+0

Спасибо за помощь! –

0

Вы пытаетесь соответствовать значению x с помощью выражений, значения которых либо true или false. Вы можете передать true в коммутаторе, и коммутатор будет «соответствовать» с первым аргументом case, который оценивается как истинный.

В то время как этот вид-a работает, я бы порекомендовал просто делать утверждения if/else. Это не будет работать для числа 30, которое является Истинным для X% 3 и x% 5. Сначала он будет соответствовать x% 3 и остановится там.

printOut = ""; 

for (var x=1; x < 101 ; x++) { 


    switch(true) { 

     case((x%3) == 0): 
     printOut+="\n"+ "Fizz" ; 
     break; 

     case((x%5) == 0): 
     printOut+="\nBuzz"; 
     break; 

     default: 
     printOut+="\n" + x ; 
     break; 

    } 

          } 
console.log(printOut); 
+0

Спасибо! Это очень полезно! –