我目前正在参加关于 Javascript 的代码学院课程,并且我被 FizzBuzz 任务困住了。我需要从 1 到 20 数,如果这个数字可以被 3 print fizzbuzz 整除,可以被 5 print buzz 整除,可以被两个 print 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;
};
};
Switch 将 switch(x){ 中的 x 与 case 表达式的求值结果相匹配。由于所有情况都会导致 true / false ,因此没有匹配项,因此始终执行默认值。
现在不建议使用 switch 来解决您的问题,因为如果表达式太多,可能会有多个 true 输出,从而给我们带来意想不到的结果。但如果你一心一意:
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;
}
}
我也想换,但没必要。
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);
}
Switch 语句检查 case 中给出的情况是否与 switch 表达式匹配。您的代码所做的是比较 x 除以 3 或 5 是否等于 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);
}
}
不要太自吹自擂,但这更干净:
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);
}
};
此声明
的
switch(true)
部分对我有帮助。我试图为 fizzbuzz
做一个 switch 语句。我的解决方案结合了 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);
}
}
}
switch (x){}
含义的误解。
这并不意味着:“每当我在这些括号之间放入true
时,当
x
的值发生变化时。”它的意思是:“只要
x
等于我放在括号之间的内容”因此,在我们的例子中,
x
永远不等于
x%3===0
或任何其他情况,这甚至没有任何意义。
x
始终等于
x
。这就是为什么机器会忽略该指令。您没有使用 switch 函数重新定义
x
。括号内的内容仅描述
x
和
x
,而不是与
x
相关的任何内容。简而言之:
使用 if/else
您可以描述任何情况。使用
switch
,您只能描述变量
x
所取的不同值。
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)
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);
}
}
const range = (startingNumber: number, endingNumber: number): number[] =>
Array.from({ length: endingNumber - startingNumber + 1 }, (_, index) => startingNumber + index);
const isDivisibleBy = (input: number, divisor: number): boolean => input % divisor === 0;
const fizzBuzzOutput = (input: number): string =>
isDivisibleBy(input, 3) && isDivisibleBy(input, 5)
? "FizzBuzz"
: isDivisibleBy(input, 3)
? "Fizz"
: isDivisibleBy(input, 5)
? "Buzz"
: input.toString();
const fizzBuzz = (startingNumber: number, endingNumber: number): string[] =>
range(startingNumber, endingNumber).map(fizzBuzzOutput);
const answer = fizzBuzz(1, 20);
console.log(answer);