【问题标题】:Understanding Difference in results between two code solutions了解两个代码解决方案之间的结果差异
【发布时间】:2013-10-20 15:32:54
【问题描述】:

我是这里的新手不止一个,所以请放轻松:)

这是我使用 javascript 解决的一个问题:

打印出 1 - 20 的数字。 规则: 对于能被 3 整除的数字,打印出“Fizz”。 对于能被 5 整除的数字,打印出“Buzz”。 对于能被 3 和 5 整除的数字,在控制台中打印出“FizzBu​​zz”。 否则,只需打印出数字即可。

这是我第一次尝试接近它:

 var numberArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];

for(var i = 0; i < numberArray.length; i++){
    if(i % 3 === 0 && i % 5 === 0){
       console.log("FizzBuzz"); 
    }
    else if(i % 3 === 0 && i % 5 !== 0){
        console.log("Fizz");
    }
    else if(i % 3 !== 0 && i % 5 === 0){
        console.log("Buzz");
    }
    else {
        console.log(numberArray[i]);
    }
}

这返回了以下错误值:

FizzBu​​zz 2 3 嘶嘶声 5 嗡嗡声 嘶嘶声 8 9 嘶嘶声 嗡嗡声 12 嘶嘶声 14 15 嘶嘶声 17 18 嘶嘶声 20

然后我采取了不同的方法,结果是正确的答案:

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

fizBuzz();

有人愿意帮助我了解第一种方法有什么问题吗?这真的很困扰我:)

【问题讨论】:

  • 第一个循环中以i=0 开头,第二个循环中以i=1 开头!
  • ..因此,它检查的第一个数字是 0 而不是 1
  • 推荐阅读:codinghorror.com/blog/2007/02/why-cant-programmers-program.html(无意冒犯。作者提到的问题与程序员的面试测试非常相似。)
  • 投票为题外话:这更适合代码审查。此外:“最低限度的理解” 是主观的,但恕我直言,这并没有表现出最低限度的理解......对不起
  • @EliasVanOotegem 不同意。他不是要求对特定实施进行审查,而是寻求帮助找出为什么一种实施有效而另一种无效。具体而言,这与 Code Review 在codereview.stackexchange.com/help/on-topic 的主题声明点 #5 相违背,因为实际上所有代码都不起作用。

标签: javascript


【解决方案1】:

问题是您正在检查 i(从 0 开始)而不是 numberArray[i](从 1 开始)的整除性。

【讨论】:

  • 就是这样!我使用的是 i % 3 而不是 numberArray[i] % 3
猜你喜欢
  • 1970-01-01
  • 2019-07-25
  • 2016-01-21
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多