#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
кратно 3result
кратно 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) . эта задача не так проста, как вы, ребята, ожидаете.