7

我目前正在学习关于 Javascript 的代码学院课程,但我被困在 FizzBu​​zz 任务上。我需要从 1 到 20 数,如果该数字可被 3 个打印嘶嘶声、5 个打印嗡嗡声整除,则由两个打印嘶嘶声整除,否则只打印数字。我可以用 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;
        };


};
4

8 回答 8

10

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;
  }

}

于 2014-09-24T14:52:37.403 回答
2

我也想切换,但没必要。

    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);
}
于 2017-02-07T10:59:33.507 回答
1

Switch 语句检查 case 中给出的情况是否与 switch 表达式匹配。您的代码所做的是比较 x 除以 3 还是 5 是否等于 x 始终为假,因此始终执行默认值。如果你真的想使用 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);
  }
}
于 2020-04-30T19:47:41.007 回答
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);
    }
};
于 2015-02-25T20:46:15.673 回答
0

这句话switch(true)一部分帮助了我。我试图为. 我的解决方案结合了Rosettacodes 的编码风格- 通用解决方案。最重要的是使用强制类型来缩短主要条件。我认为,它足够有价值,可以发布:fizzbuzz

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);
    }
  }
}
于 2015-05-17T01:10:00.213 回答
0

这对我来说很清楚,可能会有所帮助:这是对switch (x){}含义的误解。

这并不意味着:“只要我在括号之间放的是true,当值发生x变化时。”
这意味着:“只要x等于我放在这些括号之间的内容”

因此,在我们的例子中,xNEVER 等于x%3===0或任何其他情况,这甚至没有任何意义。x一直等于x。这就是机器忽略指令的原因。您没有x使用 switch 功能重新定义。你放在括号之间的内容只是描述x,与 .x无关x

简而言之:你可以描述任何情况
。 与你只能描述变量所取的不同值。if/else
switchx

于 2018-01-28T05:25:57.373 回答
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)

于 2018-05-04T20:57:24.507 回答
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);
    }
}
于 2020-08-09T23:02:38.220 回答