[英]Logical Operators in Javascript
我想同时被3和5整除时打印出FizzBuzz。我的代码可能是什么问题?
for(var i = 1; i<=20; i++){
if(i % 3 ===0){
console.log("Fizz");
}else if(i % 5 ===0){
console.log("Buzz");
}else if(i%3 ==0 && i%5 ==0){
console.log("FizzBuzz");
}else{
console.log(i);
}
}
如果第一个或第二个条件为true,则它将进入该块,但else if
条件满足,则不评估其他else if
条件。 因为第三个条件要求第一个条件和第二个条件都为真,所以它永远不会进入该块。
尝试像这样安排您的条件:
for(var i = 1; i<=20; 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);
}
}
但是,只是为了好玩,这是一个更紧凑的版本,它滥用了条件运算符 :
for(var i = 1; i<=20; i++){
console.log(i % 15 ? i % 5 ? i % 3 ? i : "Fizz" : "Buzz" : "FizzBuzz");
}
主要问题在于,只有在进行其他比较之后,您才可以检查“ FizzBuzz”。 如果i % 3 === 0
(打印“ FizzBuzz”的要求之一),它将永远不会达到 FizzBuzz检查。
作为一个简单的解决方法,将FizzBuzz检查移至第一个if语句。
for(var i = 1; i <= 20; i++) {
if(i % 3 === 0 && i % 5 === 0) {
console.log("FizzBuzz");
}
else if(i % 5 === 0) {
console.log("Buzz");
}
else if(i % 3 === 0) {
console.log("FizzBuzz");
}
else {
console.log(i);
}
}
还要考虑的另一件事是,如果i被3和5整除,那么它可以被它们的最小公分母整除,是吗? 3和5的最小公分母(可被一组数字整除的最小整数)是15,因此可以替换...
if(i % 3 === 0 && i % 5 === 0) {
...与...
if(i % 15 === 0) {
(i%3 ==0 && i%5 ==0)
应该是第一个条件。 如果您考虑一下,如果我被3和5整除,它将在到达第三个if
语句之前输入第一个if
语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.