FizzBuzz: 15 показывает Fizz, но не Buzz на новой строке.Зачем?Просто нужно уточнить - PullRequest
0 голосов
/ 01 января 2019

Просто пытаюсь понять, почему Buzz не появляется в новой строке после Fizz в течение 15.

Попытка изучить JavaScript из Eloquent Javascript и просто приступить к выполнению упражнения FizzBuzz.Обратите внимание, что я включил закомментированное решение, где оно работает (хотя и не элегантно), но я заметил, что некоторые решения, найденные в Интернете, показывают, что их 15 появляются с Fizz, но Buzz находится на новой строке, а мое решение (что не так).закомментировано) только показывает Fizz.

Может кто-нибудь объяснить мне, почему он это делает?Просто любопытно.Единственное, что я заметил, когда я использую

if ((int%3 == 0) && (int%5 == 0))

в конце или в начале блока, это когда изменения видны.

Примечание :

Я не прошу решения.Я просто хочу объяснение моего вопроса выше.Закомментированное решение дает мне FizzBuzz на 15. Пожалуйста, не поймите меня неправильно и поблагодарите вас за то, что нашли время ответить на этот вопрос.

Мое решение:

for(let int = 1; int <= 100; int++){
  if(int%3 == 0){
    console.log('Fizz');
  }
  else if(int%5 == 0){
    console.log('Buzz');
  }
  else if ((int%3 == 0) && (int%5 == 0)){
    console.log('Fizz'+'Buzz');
  }
  /*if ((int%3 == 0) && (int%5 == 0)){
    console.log('Fizz'+'Buzz');
  }
  else if(int%3 == 0){
    console.log('Fizz');
  }
  else if(int%5 == 0){
    console.log('Buzz');
  }*/

  else{    
    console.log(int);
  }
}

Ответы [ 4 ]

0 голосов
/ 01 января 2019
  else if ((int%3 == 0) && (int%5 == 0)){
    console.log('Fizz'+'Buzz');
  }

Сначала измените сравнения на строгое равенство === это поможет вам избежать проблем в вашем коде;

Затем поместите его поверх ваших сравнений, оно должно выглядеть следующим образом:

for(let int = 1; int <= 100; int++) {
    if ( i % 3 === 0 && i % 5 === 0 ) {}

Мы должны были поставить наше самое конкретное совпадение наверху, а затем отфильтровать наши проверки до самого общего.

Вы можете даже обернуть его в функцию, чтобы вы могли вызвать его и использовать повторно;

0 голосов
/ 01 января 2019

В вашем решении следующий блок является мертвым кодом:

else if ((int%3 == 0) && (int%5 == 0)){
    console.log('Fizz'+'Buzz');

Этот console.log('Fizz'+'Buzz') никогда не может быть достигнут, потому что ((int%3 == 0) && (int%5 == 0)) будет означать, что (int%3 == 0), и поэтому первый if выполняется,Из-за значения else if этот более поздний кодовый блок никогда не достигается.

Поэтому, чтобы ответить прямо:

показывают их 15, появляющиеся с Fizz, но Buzz находится на новой строке

Это, вероятно, ошибка кодирования, так как FizzBuzz обычно требует написания "Fizz Buzz" в одной строке для 15. Я бы предположил, что они не использовали "else if" - чтоВы сделали.

мое решение (которое не закомментировано) показывает только Fizz.Может кто-нибудь объяснить мне, почему он это делает.

Поскольку else if порядок блоков важен, и вы выбрали неправильный.

0 голосов
/ 01 января 2019

Вам следует изменить порядок ваших утверждений if, как вы делали это в закомментированном разделе.В противном случае, когда int = 15, ваш код будет соответствовать true для

if(int%3 == 0){
    console.log('Fizz');
  }

И он никогда не достигнет другого оператора if.

0 голосов
/ 01 января 2019

Если вы удалите else из else if(int%5 == 0), вы получите желаемый результат, я думаю.

...