FizzBu​​zz:15显示Fizz,但换行符上没有Buzz。为什么?只需要澄清

时间:2019-01-01 09:53:33

标签: javascript fizzbuzz

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

尝试从Eloquent Javascript学习JavaScript,然后开始进行FizzBu​​zz练习。请注意,我已经在其中包含了一个已注释掉的解决方案,该解决方案确实可以正常工作(尽管并不优雅),但我注意到一些在线搜索的解决方案显示了15出现在Fizz上,但Buzz在换行符上,而我的解决方案却没有(已注释掉)仅显示Fizz。

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

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

在块的末尾或开始是更改可见的时候。

注意

我不要求解决方案。我只想对上面的问题做出解释。经过评论的解决方案确实使我获得了FizzBu​​zz的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);
  }
}

4 个答案:

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

我们必须将最具体的比赛放在最前面,然后将支票筛选为最一般的比赛。

您甚至可以将其包装到函数中,以便可以调用它并重复使用;