这个嵌套的switch语句有什么问题?
What's wrong with this nested switch statement?
该语句返回1-100之间的所有数字,但不应用fizz-buzz规则。不知道为什么。你能解释一下吗?
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;
}
}
您正在将数字与布尔表达式进行比较。该开关相当于:
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);
}
使用if
语句代替开关,并首先检查双条件:
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);
}
number与case表达式匹配,因此如果number为3,则不匹配"number % 3 == 0",因为"number % 3 == 0"为真,而不是3
你的代码永远不会达到以下情况:
case number % 5 == 0 && number % 3 == 0
因为它已经进入了第一个大小写:
case number % 3 == 0:
解决这个问题的一种方法是将语句更改为:
case number % 3 == 0 && number % 5 != 0
case number % 5 == 0 && number % 3 != 0
相关文章:
- 我不知道我的编码有什么问题.(JavaScript)
- 我的流星路线出了什么问题
- 此nodeValue替换代码有什么问题
- 这个正则表达式的日期/时间有什么问题
- 我的CSS/Javascript下拉菜单测试代码出了什么问题
- 这个代码出了什么问题?(Jquery)
- 下面的Reg表达式出了什么问题
- 鼠标事件,我的代码出了什么问题
- 这个javascript语法有什么问题
- 动态创建foreignGroup并将其添加到svg中有什么问题
- 此代码中动态生成选择框有什么问题
- 我的javascript有什么问题?.className
- 这个 ajax.js 代码有什么问题
- JS代码有什么问题,让我知道代码是否可以改进
- 我的 Browserify JavaScript 代码有什么问题
- 图像上传功能将++(+1)副本添加到下一次上传.出了什么问题或如何重置“选定图像”
- 使用 Javascript 动态删除行.我的代码有什么问题
- AngularJS:这个注入我的控制器有什么问题
- 这个jQuery if语句有什么问题
- JavaScript:有人能告诉我我的代码出了什么问题吗?