FizzBuzz:15 显示 Fizz 但换行时没有 Buzz。为什么?只需要说明
FizzBuzz: 15 shows Fizz but no Buzz on newline. Why? Just need clarification
只是想了解为什么 Buzz 在 Fizz for 15 之后没有出现在换行符中。
尝试从 Eloquent Javascript 中学习 JavaScript 并且刚刚开始做 FizzBuzz 练习。请注意,我在它确实有效的地方包含了一个注释掉的解决方案(虽然不是很优雅)但是我注意到一些在线搜索的解决方案显示他们的 15 出现在 Fizz 但 Buzz 在换行符上,而我的解决方案(不是注释掉)只显示 Fizz。
任何人都可以向我解释为什么这样做吗?只是好奇。我唯一注意到的是当我使用
if ((int%3 == 0) && (int%5 == 0))
块的末尾或开头是更改可见的时间。
注:
我不是在寻求解决方案。我只想对我上面的问题进行解释。评论的解决方案确实给了我 15 的 FizzBuzz。请不要误解,感谢您花时间回答这个问题。
我的解决方案:
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);
}
}
如果你从 else if(int%5 == 0)
中删除 else
我想你会得到你想要的输出。
在您的解决方案中,以下块是死代码:
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
的含义,后面的代码块永远不会到达。
所以直接回答:
show their 15 appearing with Fizz but Buzz is on a newline
这可能是一个编码错误,因为 FizzBuzz 通常需要在一行中写 "Fizz Buzz" 表示 15。我猜他们没有使用任何 "else if" - 而你却使用了。
my solution (which is not commented out) only shows Fizz.
Can anyone explain to me why does it do this.
因为else if
阻塞顺序很重要,而你选错了。
您应该像在注释掉的部分中那样颠倒 if 语句的顺序。否则,当 int = 15 时,您的代码将匹配
if(int%3 == 0){
console.log('Fizz');
}
而且它永远不会到达另一个 if 语句。
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 ) {}
我们必须将最具体的匹配项放在顶部,然后将我们的检查过滤到最一般的匹配项。
您甚至可以将其包装到函数中,以便调用和重用;
只是想了解为什么 Buzz 在 Fizz for 15 之后没有出现在换行符中。
尝试从 Eloquent Javascript 中学习 JavaScript 并且刚刚开始做 FizzBuzz 练习。请注意,我在它确实有效的地方包含了一个注释掉的解决方案(虽然不是很优雅)但是我注意到一些在线搜索的解决方案显示他们的 15 出现在 Fizz 但 Buzz 在换行符上,而我的解决方案(不是注释掉)只显示 Fizz。
任何人都可以向我解释为什么这样做吗?只是好奇。我唯一注意到的是当我使用
if ((int%3 == 0) && (int%5 == 0))
块的末尾或开头是更改可见的时间。
注:
我不是在寻求解决方案。我只想对我上面的问题进行解释。评论的解决方案确实给了我 15 的 FizzBuzz。请不要误解,感谢您花时间回答这个问题。
我的解决方案:
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);
}
}
如果你从 else if(int%5 == 0)
中删除 else
我想你会得到你想要的输出。
在您的解决方案中,以下块是死代码:
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
的含义,后面的代码块永远不会到达。
所以直接回答:
show their 15 appearing with Fizz but Buzz is on a newline
这可能是一个编码错误,因为 FizzBuzz 通常需要在一行中写 "Fizz Buzz" 表示 15。我猜他们没有使用任何 "else if" - 而你却使用了。
my solution (which is not commented out) only shows Fizz. Can anyone explain to me why does it do this.
因为else if
阻塞顺序很重要,而你选错了。
您应该像在注释掉的部分中那样颠倒 if 语句的顺序。否则,当 int = 15 时,您的代码将匹配
if(int%3 == 0){
console.log('Fizz');
}
而且它永远不会到达另一个 if 语句。
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 ) {}
我们必须将最具体的匹配项放在顶部,然后将我们的检查过滤到最一般的匹配项。
您甚至可以将其包装到函数中,以便调用和重用;