javascript fizzbuzz switch语句

时间:2014-09-24 14:42:22

标签: javascript switch-statement fizzbuzz

我目前正在接受关于Javascript的代码学院课程,但我仍然坚持使用FizzBu​​zz任务。我需要从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;
        };


};

8 个答案:

答案 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。您放在括号中的内容仅描述xx,而不是与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);
    }
}