【问题标题】:I "solved" FizzBuzz, but I don't understand why it's working我“解决”了 FizzBu​​zz,但我不明白它为什么会起作用
【发布时间】:2017-11-29 15:02:36
【问题描述】:

我完全是绿色的。刚开始阅读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”的?

感谢阅读。

【问题讨论】:

  • x++if-else 语句之外。它总是被执行。缩进在 JavaScript 中无关紧要。
  • 另外那个代码是错误的;第一个if 条件测试同一件事两次。
  • 该解决方案不起作用。第 3 行的 5s 之一应该是 3

标签: javascript fizzbuzz


【解决方案1】:

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

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)。

【讨论】:

    【解决方案2】:

    因为else 没有括号,所以它只执行它后面的单个命令。因此,x++ 在每次迭代时都会执行。

    顺便说一下,你应该把if (x % 5 == 0 &amp;&amp; x % 5 == 0)改成if (x % 3 == 0 &amp;&amp; x % 5 == 0)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 2019-06-09
      • 2014-04-20
      相关资源
      最近更新 更多