我目前正在接受关于Javascript的代码学院课程,但我仍然坚持使用FizzBuzz任务。我需要从1-20计算,如果数字可以被3个打印嘶嘶声,5个打印嗡嗡声,可以被两个打印fizzbuzz整除,否则只需打印数字。我能用if / else if语句来做,但是我想用switch语句来尝试它,并且无法得到它。我的控制台只记录默认值并打印1-20。有什么建议?
for (var x = 0; x<=20; x++){
switch(x){
case x%3==0:
console.log("Fizz");
break;
case x%5===0:
console.log("Buzz");
break;
case x%5===0 && x%3==0:
console.log("FizzBuzz");
break;
default:
console.log(x);
break;
};
};
答案 0 :(得分:7)
Switch将switch(x){中的x匹配{与评估case表达式的结果相匹配。因为所有情况都会导致true / false,所以没有匹配,因此默认执行总是如此。
现在不建议使用switch来解决您的问题,因为如果表达式太多,可能会有多个真正的输出,从而给我们带来意想不到的结果。但是,如果你对此非常感兴趣:
for (var x = 0; x <= 20; x++) {
switch (true) {
case (x % 5 === 0 && x % 3 === 0):
console.log("FizzBuzz");
break;
case x % 3 === 0:
console.log("Fizz");
break;
case x % 5 === 0:
console.log("Buzz");
break;
default:
console.log(x);
break;
}
}
答案 1 :(得分:1)
我也想过切换,但没有必要。
for (var n = 1; n <= 100; n++) {
var output = "";
if (n % 3 == 0)
output = "Fizz";
if (n % 5 == 0)
output += "Buzz";
console.log(output || n);
}
答案 2 :(得分:1)
Switch语句检查案例中给出的情况是否与switch表达式匹配。您的代码所做的是比较x除以3还是5是否等于x,x始终为false,因此始终执行默认值。如果您真的想使用switch语句,则可以采用以下一种方法。
for (var i=1; i<=30; i++){
switch(0){
case (i % 15):
console.log("fizzbuzz");
break;
case (i % 3):
console.log("fizz");
break;
case (i % 5):
console.log("buzz");
break;
default:
console.log(i);
}
}
答案 3 :(得分:0)
不是我自己的号角,但这更清洁:
var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
for (var i = 1; i <= numbers.length; i++) {
if (i % 15 === 0) {
console.log("FizzBuzz");
} else if (i % 5 === 0) {
console.log("Buzz");
} else if (i % 3 === 0) {
console.log("Fizz");
} else {
console.log(i);
}
};
答案 4 :(得分:0)
switch(true)
部分of this statement帮助了我。我试图为fizzbuzz
做一个switch语句。我的解决方案包含编码style of Rosettacodes - 一般解决方案。最显着的是使用强制打字来缩短主要条件。我想,这很有价值,可以发布:
var fizzBuzzSwitch = function() {
for (var i =0; i < 101; i++){
switch(true) {
case ( !(i % 3) && !(i % 5) ):
console.log('FizzBuzz');
break;
case ( !(i % 3) ):
console.log('Fizz');
break;
case ( !(i % 5) ):
console.log('Buzz');
break;
default:
console.log(i);
}
}
}
答案 5 :(得分:0)
这里有什么能让我清楚,可能有所帮助:
这是switch (x){}
意味着什么的误解。
这并不意味着:&#34;无论我放在这些括号之间的是true
,当x
的值发生变化时。&#34 ;
这意味着:&#34;只要x
等于我在这些括号之间放置的内容&#34;
所以,在我们的例子中,x
永远等于x%3===0
或任何其他情况,这甚至都没有意义。 x
始终等于x
。这就是机器忽略指令的原因。您没有使用切换功能重新定义x
。您放在括号中的内容仅描述x
和x
,而不是与x
相关的任何内容。
简而言之:
使用if/else
,您可以描述任何条件
使用switch
,您只能描述变量x
所采用的不同值。
答案 6 :(得分:0)
这是一个包含@ CarLuvr88答案和0开关的解决方案:
let fizzBuzz = function(min, max){
for(let i = min; i <= max; i++){
switch(0){
case i % 15 : console.log('FizzBuzz'); break;
case i % 3 : console.log('Fizz'); break;
case i % 5 : console.log('Buzz'); break;
default : console.log(i); break;
}
}
}
fizzBuzz(1,20)
答案 7 :(得分:0)
我们可以使用函数来查找任意数量的倍数,并声明两个变量以标识这些倍数,因此,如果要更改倍数,只需要更改最多2行代码即可。
function isMultiple(num, mod) {
return num % mod === 0;
}
let a = 3;
let b = 5;
for(i=0;i<=100;i++){
switch(true){
case isMultiple(i,a) && isMultiple(i,b):
console.log("FizzBuzz")
case isMultiple(i,a):
console.log("Fizz");
case isMultiple(i,b):
console.log("Buzz");
default:
console.log(i);
}
}