我“解决了”FizzBu​​zz,但我不明白为什么它会起作用

时间:2017-11-29 15:02:37

标签: javascript fizzbuzz

我完全是绿色的。刚开始阅读Eloquent JavaScript,第2章开始练习。

显然“FizzBu​​zz”问题不需要介绍。我花了大约一个小时的时间给它一个诚实的去,尝试不同的方法。

最后得到了一个不那么雄辩的解决方案。但是当我看到它时,我不明白它是如何工作的:

var x = 1
while (x <= 20){
  if (x % 5 == 0 && x % 5 == 0){
    console.log("FizzBuzz");
  }
  else if (x % 5 == 0){
    console.log("Buzz");
  }
  else if (x % 3 == 0){
    console.log("Fizz");
  }
  else
    console.log(x);
    x++;
}

所以,根据我目前的理解:我希望这个脚本在第一个“Fizz”中数到3,然后陷入无限循环。

显然我理解这是错的。如何将脚本移动到'4'上?

感谢阅读。

2 个答案:

答案 0 :(得分:3)

如果你正确格式化它会变得明显。

var x = 1
while (x <= 20){
  if (x % 5 == 0 && x % 3 == 0){
    console.log("FizzBuzz");
  }
  else if (x % 5 == 0){
    console.log("Buzz");
  }
  else if (x % 3 == 0){
    console.log("Fizz");
  }
  else
    console.log(x);
  x++;
}

也就是说,x++独立于条件执行,因为else子句没有括号,所以它只考虑一个语句(即console.log

我还更正了您在第一个条件中遇到的错误(您检查了x%5两次而不是检查x%3)。

答案 1 :(得分:0)

因为else没有括号,所以它只执行一个命令。所以x++在每次迭代时执行。

顺便说一下,您应该将if (x % 5 == 0 && x % 5 == 0)更改为if (x % 3 == 0 && x % 5 == 0)