理解两种代码解决方案之间结果的差异
理解两种代码解决方案之间结果的差异
我在很多方面都是一个新手,所以请对我温柔点 🙂
以下是我使用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();
有人愿意帮我理解第一种方法错在哪里吗?这真的让我困扰 🙂
问题的原因是在代码中检查了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整除性,并输出符合条件的元素。