JS -我的循环和if语句打印出错误的字符串

JS - My loop and if statements print out the wrong string?

本文关键字:出错 打印 错误 字符串 语句 if 我的 循环 JS      更新时间:2023-09-26

我的循环似乎打印出错误的字符串。我需要15美元来打印fizzbuzz。在我看来,应该是这样。

 var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
 for (i=0; i < numbers.length; i++)
     if (numbers[i]%3 === 0 && numbers % 5 !== 0 ){
         console.log("Fizz");
     } else if (numbers[i] % 5 === 0 && numbers[i] % 3 !== 0) {
         console.log("Buzz");
     } else if (numbers[i] % 3 === 0 && numbers[i]%5 === 0) {
         console.log("FizzBuzz"); 
     } else {
         console.log(numbers[i]);
     } 
};

这是因为您在第4行写的是numbers % 5而不是numbers[i] % 5

作为一般规则,重要的是将迭代器存储在变量中,以避免这种情况(并缓存值,而不是每次都检索值)。如果可以的话,使用for..of ES6语法,它使事情更容易写,更易读,更少出错。

for (const number of numbers) {
   if (number % 3 === 0 && number % 5 !== 0 ){
     console.log("Fizz");
   } else if (number % 5 === 0 && number % 3 !== 0) {
     console.log("Buzz");
   } else if (number % 3 === 0 && number%5 === 0) {
     console.log("FizzBuzz"); 
   } else {
     console.log(numbers[i]);
   }
}

请记住,Fizzbuzz测试是一个简单的面试问题,由开发StackOverflow的家伙想象出来的。在这个测试中失败不是一个选择:)所以训练你的代码风格来编写更少容易出错的代码。

例如,在多个if/else语句中测试变量之前,尝试将考虑的值存储在一个变量中,这是一个好习惯,它使代码更具可读性,更容易调试。看这里,如果不这样做,你就花了很多时间来理解错误,并且不得不问SO关于这个。想象一下,如果它是一个真正的工业代码,它将付出多大的代价。

祝你好运,代码安全:)