FizzBu​​zz:15 显示 Fizz 但换行时没有 Buzz。为什么?只需要说明

FizzBuzz: 15 shows Fizz but no Buzz on newline. Why? Just need clarification

只是想了解为什么 Buzz 在 Fizz for 15 之后没有出现在换行符中。

尝试从 Eloquent Javascript 中学习 JavaScript 并且刚刚开始做 FizzBu​​zz 练习。请注意,我在它确实有效的地方包含了一个注释掉的解决方案(虽然不是很优雅)但是我注意到一些在线搜索的解决方案显示他们的 15 出现在 Fizz 但 Buzz 在换行符上,而我的解决方案(不是注释掉)只显示 Fizz。

任何人都可以向我解释为什么这样做吗?只是好奇。我唯一注意到的是当我使用

if ((int%3 == 0) && (int%5 == 0))

块的末尾或开头是更改可见的时间。

:

我不是在寻求解决方案。我只想对我上面的问题进行解释。评论的解决方案确实给了我 15 的 FizzBu​​zz。请不要误解,感谢您花时间回答这个问题。

我的解决方案:

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 ) {}

我们必须将最具体的匹配项放在顶部,然后将我们的检查过滤到最一般的匹配项。

您甚至可以将其包装到函数中,以便调用和重用;