使用JavaScript Switch实现FizzBuzz遇问题:代码无效求排查
排查你的FizzBuzz代码问题
嘿,我一眼就揪出问题啦!你的JavaScript代码没法正常实现FizzBuzz,核心问题出在switch语句的使用逻辑错误上。
错误原因解析
JavaScript的switch语句是拿括号里的表达式(你这里写的是i)和每个case后面的值做严格相等(===)比较。而你在case里写的是条件判断(比如i%3 === 0 && i%5 === 0),这些条件的计算结果是布尔值true或false。但i是1到100的数字,数字和布尔值永远不会严格相等,所以所有case都不会被命中,自然不会输出你想要的内容。
举个例子:当i=15时,第一个case的条件结果是true,但switch会判断15 === true,这个结果是false,所以不会执行该分支的代码。
修正方案
这里给你两种可行的修正方式:
方式1:调整switch的表达式为true
把switch的表达式改成true,这样每个case的布尔值结果就能和它匹配:
for(var i = 1; i <= 100; i++) { switch (true) { case (i%3 === 0 && i%5 === 0): console.log('FizzBuzz'); break; case (i%3 === 0): console.log('Fizz'); break; case (i%5 === 0): console.log('Buzz'); break; default: console.log(i); // 处理既不能被3也不能被5整除的数字 } }
方式2:改用更直观的if-else逻辑
这是实现FizzBuzz最常用的写法,逻辑更清晰易懂:
for(var i = 1; i <= 100; i++) { if (i % 3 === 0 && i % 5 === 0) { console.log('FizzBuzz'); } else if (i % 3 === 0) { console.log('Fizz'); } else if (i % 5 === 0) { console.log('Buzz'); } else { console.log(i); } }
另外,你原来的代码里def...应该是没写完的default分支,一定要加上它才能打印那些既不是Fizz、Buzz也不是FizzBuzz的数字哦!
内容的提问来源于stack exchange,提问作者Karma
相关产品推荐
相关产品推荐

