只是想了解为什么Fizz for 15之后在换行符中没有出现Buzz?
尝试从Eloquent Javascript学习JavaScript,然后开始进行FizzBuzz练习。请注意,我已经在其中包含了一个已注释掉的解决方案,该解决方案确实可以正常工作(尽管并不优雅),但我注意到一些在线搜索的解决方案显示了15出现在Fizz上,但Buzz在换行符上,而我的解决方案却没有(已注释掉)仅显示Fizz。
有人可以向我解释为什么这样做吗?只是好奇。我唯一注意到的是当我使用
时if ((int%3 == 0) && (int%5 == 0))
在块的末尾或开始是更改可见的时候。
注意:
我不要求解决方案。我只想对上面的问题做出解释。经过评论的解决方案确实使我获得了FizzBuzz的15分。请不要误会,感谢您抽出宝贵的时间来回答这个问题。
我的解决方案:
for(let int = 1; int <= 100; int++){
if(int%3 == 0){
console.log('Fizz');
}
else if(int%5 == 0){
console.log('Buzz');
}
else if ((int%3 == 0) && (int%5 == 0)){
console.log('Fizz'+'Buzz');
}
/*if ((int%3 == 0) && (int%5 == 0)){
console.log('Fizz'+'Buzz');
}
else if(int%3 == 0){
console.log('Fizz');
}
else if(int%5 == 0){
console.log('Buzz');
}*/
else{
console.log(int);
}
}
答案 0 :(得分:0)
如果您从else
中删除else if(int%5 == 0)
,我想您将获得所需的输出。
答案 1 :(得分:0)
在您的解决方案中,以下代码段为无效代码:
else if ((int%3 == 0) && (int%5 == 0)){
console.log('Fizz'+'Buzz');
此console.log('Fizz'+'Buzz')
永远不会达到,因为((int%3 == 0) && (int%5 == 0))
意味着(int%3 == 0)
,因此第一个if
被执行。由于else if
的含义,以后的代码块将永远无法到达。
直接回答:
显示他们的15位与Fizz一起出现,但Buzz在换行符上
这可能是一个编码错误,因为FizzBuzz通常需要在一行上写15个“ Fizz Buzz”。我想他们没有使用任何“ else if”(您这样做了)。
我的解决方案(未注释掉)仅显示Fizz。 谁能向我解释为什么这样做?
因为else if
阻止订单很重要,而您选择了错误的订单。
答案 2 :(得分:0)
您应该像在注释掉的部分中那样反转if语句的顺序。否则,当int = 15时,您的代码将与
相匹配。if(int%3 == 0){
console.log('Fizz');
}
它永远不会到达其他if语句。
答案 3 :(得分:0)
else if ((int%3 == 0) && (int%5 == 0)){
console.log('Fizz'+'Buzz');
}
首先将比较更改为严格相等===
,这将帮助您规避代码中的问题;
然后将其放在您的比较之上,它必须类似于以下代码:
for(let int = 1; int <= 100; int++) {
if ( i % 3 === 0 && i % 5 === 0 ) {}
我们必须将最具体的比赛放在最前面,然后将支票筛选为最一般的比赛。
您甚至可以将其包装到函数中,以便可以调用它并重复使用;