2013-03-08 38 views
0

正如你可以直接看到這是一個for循環,有一些if條件就在這裏(就是你說的「if conditionals」???)。 我有2個問題實際。爲什麼它跳過並繼續,即使第一個if語句是真的

我上CodeAcademy工作,並要求我做到這一點:

Print out the numbers from 1 - 20. 
The rules: 
For numbers divisible by 3, print out "Fizz". 
For numbers divisible by 5, print out "Buzz". 
For numbers divisible by both 3 and 5, print out "FizzBuzz" in the console. 
Otherwise, just print out the number.** 

這是我迄今所做的,我也覺得它的工作正確的,是一般正確的,萬能的,但CodeAcademy不會說這是。我想知道是否有人知道我的代碼是否有問題,或者如果這只是完成他們請求的確切事情的不同方式(參考上述規則)。

另外第二個問題,這更是我的好奇問題。如果我們現在以15爲例。當JavaScript遇到15時如何思考。 如果15可以被3除盡,並且剩下0,那麼它不應該是console.log(「Fizz」),而不是一直到幾乎最後的底部代碼和控制檯。日誌( 「FizzBu​​zz」); 有人可以解釋這對我來說,pleeaassee :)

for (var iterator = 1; iterator <= 20; iterator = iterator + 1) { 
     if (iterator % 3 === 0) { 
      console.log("Fizz"); 

     } else if (iterator % 5 === 0) { 
      console.log("Buzz"); 

     } else if (iterator % 3 === 0) { 
      if (iterator % 5 === 0) { 
       console.log("FizzBuzz"); 
      } 
     } else { 
      console.log(iterator); 
     } 

    } 
+0

你不能用螢火蟲調試嗎? – topcat3 2013-03-08 16:53:07

+0

你說得對,15這個代碼不應該生成「FizzBu​​zz」。你是否說過它? – 2013-03-08 16:56:54

+1

15滿足您的第一個條件,因爲它可以被3整除,所以可以被5和3整除的測試永遠不會執行。首先測試3和5是快速的方法。 – 2013-03-08 16:58:21

回答

2

我測試你的代碼,並沒有得到你所描述的輸出,與15成功打印「FizzBu​​zz」。我得到15的預期結果顯示爲「Fizz」。它不能正常工作,因爲它沒有機會達到最終的if語句來打印出「FizzBu​​zz」爲15。一個簡單的解決方法是在數字被3整除時檢查可分性。

for (var iterator = 1; iterator <= 20; iterator = iterator + 1) { 
    if (iterator % 3 === 0) { 
     if (iterator % 5 === 0) { 
      console.log("FizzBuzz"); //divisible by 3 and 5 
     } else { 
      console.log("Fizz"); //only divisible by 3 
     } 
    } else if (iterator % 5 === 0) { 
     console.log("Buzz"); //only divisible by 5 
    } else { 
     console.log(iterator); //not divisible by 3 or 5 
    } 
} 
+0

我意識到我在這裏告訴了錯誤的信息,但現在有一件事讓我感到擔憂。 JavaScript如何知道天氣對console.log Fizz,Buzz或FizzBu​​zz什麼時候可以被3,5和3和5分割,除了考慮if語句的順序。 JavaScript可以遍歷所有的代碼然後執行? – user2097217 2013-03-08 17:12:17

+0

@ user2097217:JavaScript解釋器逐步完成所有代碼。我建議你在第一個'if'條件下設置一個斷點,然後遍歷每個'iterator'實例的代碼並查看它的行爲。 – 2013-03-08 17:26:21

+0

JavaScript Rocks !!!!! :D:D:D – user2097217 2013-03-08 17:50:27

-1

它可能給你的解決方案: 只是重新安排代碼:

for (var iterator = 1; iterator <= 20; iterator = iterator + 1) { 

    if (iterator % 3 === 0) { 
     if (iterator % 5 === 0) { 
      console.log("FizzBuzz"); 
     } 
    }else if (iterator % 3 === 0) { 
     console.log("Fizz"); 

    } else if (iterator % 5 === 0) { 
     console.log("Buzz"); 

    } else { 
     console.log(iterator); 
    } 

} 

首先檢查條件同時滿足這兩個被3整除和5 ,辦理入住手續後3和5分別。

+1

不,現在第二個條件永遠不會達到。 – 2013-03-08 17:05:13

+0

這對我來說是自相矛盾的,因爲15分爲3分和5分,它如何知道天氣對console.log Fizz或FizzBu​​zz或Buzz? – user2097217 2013-03-08 17:06:31

相關問題