理解两种代码解决方案之间结果的差异

14 浏览
0 Comments

理解两种代码解决方案之间结果的差异

我在很多方面都是一个新手,所以请对我温柔点 🙂

以下是我使用JavaScript解决的一个问题:

打印出1-20的数字。

规则如下:

对于能被3整除的数字,打印出“Fizz”。

对于能被5整除的数字,打印出“Buzz”。

对于既能被3整除又能被5整除的数字,在控制台打印出“FizzBuzz”。

否则,只打印出数字本身。

这是我最初尝试的方法:

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]);
    }
}

这返回了以下不正确的值:

FizzBuzz

2

3

Fizz

5

Buzz

Fizz

8

9

Fizz

Buzz

12

Fizz

14

15

FizzBuzz

17

18

Fizz

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();

有人愿意帮我理解第一种方法错在哪里吗?这真的让我困扰 🙂

0
0 Comments

问题的原因是在代码中检查了i(从0开始)的可被整除性,而没有检查numberArray[i](从1开始)的可被整除性。解决方法是改为检查numberArray[i] % 3的可被整除性,而不是i % 3的可被整除性。具体代码如下:

// 原来的代码

for (int i = 0; i < numberArray.length; i++) {

if (i % 3 == 0) {

System.out.println(numberArray[i] + " is divisible by 3");

}

}

// 修改后的代码

for (int i = 1; i < numberArray.length; i++) {

if (numberArray[i] % 3 == 0) {

System.out.println(numberArray[i] + " is divisible by 3");

}

}

通过将检查条件从i % 3修改为numberArray[i] % 3,问题得到了解决。现在,代码将正确地检查numberArray中每个元素的可被3整除性,并输出符合条件的元素。

0