【问题标题】:Javascript Fizzbuzz IssueJavascript Fizzbuzz 问题
【发布时间】:2012-12-06 03:55:17
【问题描述】:

我正在尝试做一些简单的测试来帮助我进一步了解 javascript 知识(这很新鲜)。目标 1 是打印 1-100 不能被 5 或 3 整除的数字。

我尝试了以下方法:

for (var i = 1; i <= 100; i ++) 
{
    if (i%3 !== 0 || i%5 !== 0){
        console.log(i);
    }

}

这会记录从 1 到 100 的每个数字,我不知道为什么。可能是这里最简单的问题,但它让我很头疼!

【问题讨论】:

  • 它实际上并没有记录每个数字 - 它会跳过每一个 15 的倍数!
  • 嗯。感谢您没有完全放弃它,因为我真的很想在这里学习。我以为||表示“或”,所以如果 i%3 为 0(这意味着它可以被 3 整除),它不应该打印这些数字吗?
  • 你忘记了另一个案例:i % 5 !== 0
  • 我想我现在明白了。但是在上面的代码中,如果i===3,不应该使i%3!==0 为假,这意味着i%5!==0 甚至不应该评估吗?
  • 您正在使用||,逻辑or 运算符;如果左侧条件或右侧条件为真,则整个条件评估为真。顺便说一句,根据德摩根定律,i%3 !== 0 || i%5 !== 0i%3 == 0 &amp;&amp; i%5 == 0 的含义完全相同。

标签: javascript fizzbuzz


【解决方案1】:

我想你的意思是&amp;&amp;,而不是||。使用||,您基本上是在测试该数字是否不能被 3 或 5 整除 - 只有当一个数字可以被两者整除时,您才会拒绝它(换句话说,是 15 的倍数)。

对 FizzBu​​zz 的典型回答是:

if( i%3 == 0 && i%5 == 0) FizzBuzz
elseif( i % 3 == 0) Fizz
elseif( i % 5 == 0) Buzz
else number

所以要直接获得i%3==0 为假和i%5==0 为假所需的号码。因此,你想要if( i%3 !== 0 &amp;&amp; i%5 !== 0)

【讨论】:

  • 这不是实际代码,我只是把它们放在那里基本上是说“把 Fizz 编写代码放在这里”
  • 哎呀,删除了我的评论。是的,我一发布就想到了!感谢您的帮助伙伴。
  • 没问题 :) 以后如果你有这样的问题,试着拿一些纸画一个真值表。通过它运行一些值,看看它是否正确。这将帮助您发现此类问题。
【解决方案2】:

我的攻击方式和 Niet the Dark Absol 一样:

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

不过,你也可以这样做:

for (var n = 1; n <= 100; n++) {
    var output = "";
    if (n % 3 == 0)
        output += "Fizz";
    if (n % 5 == 0)
        output += "Buzz";
    console.log(output || n);
}

对我而言,学习 JavaScript(或任何语言)最难的部分之一是理解解决方案可以通过多种方式实现。我更喜欢第一个示例,但继续思考并查看其他选项总是好的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多