2016-09-23 45 views
0

我的循環似乎打印出錯誤的字符串。我需要15才能打印出fizzbuzz。對我來說,它似乎應該。JS - 我的循環和if語句打印出錯誤的字符串?

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

在第4行,你忘記了數字後的[[i]]。 – 2016-09-23 14:25:51

+0

@OlivierGrech好的。 –

+0

可以使用numbers.forEach(function(number){// your logic});以簡化代碼。然後你不必處理索引。 – basav

回答

0

那是因爲你在第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語句中測試它之前,將其考慮在變量中的值存儲起來,例如,這是一個好習慣,它使代碼更易讀,更易於調試。看到這裏,如果不這麼做,你花了很多時間去理解錯誤,並且不得不就此問一問。想想如果它是一個真正的行業代碼,它的成本。

祝你好運,代碼安全:)