Как проверить число на соответствие двум условиям одновременно с помощью Javascript?

#javascript #loops #if-statement

#javascript #циклы #if-оператор

Вопрос:

У меня возникла проблема с одновременным тестированием цикла на соответствие двум условиям.

 for (var result = 0; result <= 100; result   )
  if (result % 3 == 0)
    console.log ('Fizz');
  else if (result % 5 == 0)
    console.log ('Buzz');
   else console.log (result);
  

Как я могу создать третье условие, которое проверяет, делится ли результат на 3 И 5?

 else if ( result % 5 == 0 amp;amp; result % 3 == 0)
    console.log ('FizzBuzz');
  else console.log (result);
  

Это было мое решение, и ‘FizzBuzz’ вообще не делал его консольным! Почему это решение не сработало?

Комментарии:

1. вам не нужно проверять его result % 5 == 0 amp;amp; result % 3 == 0 . на самом деле вы не должны этого делать! это сложная задача, и решение не так просто, как вы можете ожидать. ознакомьтесь с решением ниже.

2. эта задача не о том, чтобы просто поместить fizzbuzz материал в консоль, а о применении концепции композиции в javascript, но вы не объединяете объекты, которые вы объединяете if statements для создания более сложного оператора.

Ответ №1:

Порядок имеет значение!

 if (result % 5 == 0 amp;amp; result % 3 == 0)
  console.log ('FizzBuzz');
else if (result % 3 == 0)
  console.log ('Fizz');
else if (result % 5 == 0)
  console.log ('Buzz');
else console.log (result);
  

Когда result оба числа кратны 3 И кратны 5, выполняются оба следующих:

  • result кратно 3
  • result кратно 5

Поэтому, если вы проверите result % 5 == 0 amp;amp; result % 3 == 0 else часть, это никогда не будет правдой.

Вы также можете рассмотреть вложенные условные выражения:

 if (result % 3 == 0)
  if (result % 5 == 0)
    console.log ('FizzBuzz');
  else
    console.log ('Fizz');
else if (result % 5 == 0)
  console.log ('Buzz');
else console.log (result);
  

Комментарии:

1. О, вау, Ориол, ты абсолютно прав, это немедленно устранило мою проблему!

2. @IslamIbakaev Как ты узнаешь, кратно ли оно обоим?

3. Небольшой смысловой момент (извините!): проверка этого result % 5 === 0 amp;amp; result % 3 === 0 в else части не означает, что это неверно, просто условие никогда не достигается и поэтому никогда не проверяется, потому что оба предыдущих условия также верны. Мне искренне жаль, это действительно второстепенный момент … 😕

4. @DavidThomas Условие будет достигнуто, если result оно не кратно ни 3, ни 5, и всегда будет ложным. Конечно, условие будет истинным, если result оно кратно 3 и 5, но в этом случае оно не будет достигнуто, да.

Ответ №2:

В вашем последнем фрагменте кода немного не хватает, но я бы предположил, что это потому, что вы тестируете свое AND утверждение в else if блоке.

Вы говорите

 if result is a multiple of 3 print fizz
otherwise (not a multiple of 3), if result is a multiple of 5 print buzz
otherwise (not a multiple of 3 nor 5), if result is a multiple of 3 and 5 print fizzbuzz
  

Очевидно, что результатом никогда не будут все условия в части 3, поскольку это не может быть

 NOT 3x 
NOR 5y 
AND 3x 
AND 5y 
  

в то же время

Ответ №3:

У вас правильная идея, но неправильный порядок. Поскольку отдельные операторы:

 if(result % x == 0)
  

вернется перед объединенным оператором if(), и поэтому условие никогда не заходит так далеко. Это сработало для меня:

 for(var result=0; result <=15; result  ) 
  if(result % 5 == 0 amp;amp; result % 3 ==0) 
      console.log('FizBuzz');
    else if(result % 3 == 0)
      console.log('Fizz')
  else if(result % 5 == 0)
    console.log('Buzz');
  else
    console.log(result)
  

Ответ №4:

в этом суть задачи — вам не нужно проверять (i % 3 === 0 amp;amp; i % 5 === 0)

 function fizzBuzzTest() {
  "use strict";

  for (let i = 1; i <= 100; i  ) {
    let str = "";

    if (i % 3 === 0) {
      str = "Fizz";
    }
    if (i % 5 === 0) {
      str  = "Buzz";
    }
    if (!str) {
      str = i;
    }

    console.log(str);
  }
}
fizzBuzzTest();  

Комментарии:

1. вы, ребята, прежде чем ставить минус, лучше проверьте, как это работает

2. Если вы хотите, чтобы мы » проверили, как это работает «, включите фрагмент в свой ответ, чтобы мы могли видеть , как он работает.

3. но зачем ставить минус перед его проверкой?

4. Потому что это интуитивно кажется неправильным? Я понятия не имею, я не голосовал в любом случае, но я вижу, что это работает, хотя написано иначе, чем я бы сделал это сам, но это просто личное предпочтение.

5. это задача, с которой вы можете столкнуться на code interview. И сложная часть заключается в том, что вы не должны проверять (3 и 5) . эта задача не так проста, как вы, ребята, ожидаете.