Reputation: 671
This statement is returning all the numbers from 1-100, but is not applying fizz-buzz rules. Not sure why. Can you offer an explanation?
for (var number = 1; number <= 100; number++) {
switch(number) {
case number % 3 == 0:
console.log('Fizz');
break;
case number % 5 == 0:
console.log('Buzz');
break;
case number % 5 == 0 && number % 3 == 0:
console.log('FizzBuzz');
break;
default:
console.log(number);
break;
}
}
Upvotes: 0
Views: 162
Reputation: 197
number is matched against expression of case so if number is 3, it does not match "number % 3 == 0" because "number % 3 == 0" is true, not 3
Upvotes: 1
Reputation: 610
Your code will never reach the case:
case number % 5 == 0 && number % 3 == 0
because it will have already made it into the first case:
case number % 3 == 0:
One way around this would be to change the statements to:
case number % 3 == 0 && number % 5 != 0
case number % 5 == 0 && number % 3 != 0
Upvotes: -1
Reputation: 700562
You are comparing the number with boolean expressions. The switch would be equivalent with:
if (number == (number % 3 == 0)) {
console.log('Fizz');
} else if (number == (number % 5 == 0)) {
console.log('Buzz');
} else if (number == (number % 5 == 0 && number % 3 == 0)) {
console.log('FizzBuzz');
} else {
console.log(number);
}
Use if
statements instead of a switch, and check the double condition first:
if (number % 5 == 0 && number % 3 == 0) {
console.log('FizzBuzz');
} else if (number % 3 == 0) {
console.log('Fizz');
} else if (number % 5 == 0) {
console.log('Buzz');
} else {
console.log(number);
}
Upvotes: 4