2010-07-10 65 views
1

我有一個關於這個程序的問題,它說:FizzBu​​zz挑戰:顯示從1到x的數字,用3的倍數替換單詞'fizz',用5的倍數替換'buzz',以及替換爲'fizzbuzz'的倍數結果必須是:1 2嘶嘶聲4嗡嗡聲7 8嘶嘶聲11嘶嘶聲13 14嘶嘶聲16 ...FizBuzz程序:如何使輸出正確?

所以我的問題是在打印輸出時,我不知道什麼去做。

public class Multiplos { 

    public static void main(String args[]) { 

     for (int i = 1; i <= 100; i++) { 

      if (i % 3 == 0) { 
       System.out.print(i + " "); 
       System.out.print(" fizz "); 
      } 

      if (i % 5 == 0) { 
       System.out.print(" " + i); 
       System.out.print(" " + "buzz "); 
      } 

      if((i % 3 == 0)&&(i % 5 == 0)){ 
       System.out.print(i + " "); 
       System.out.print(" fizzbuzz "); 
      } 

     } 

    } 
} 
+5

維基百科充滿了對此的答案。 – 2010-07-10 22:03:18

回答

4

這裏是僞代碼:

for i in 1 to 100 
    if(i % 5 == 0) AND (i % 3 == 0) print 'fizzbuzz' 
    else if(i % 3 == 0) print 'fizz' 
    else if(i % 5 == 0) print 'buzz' 
    else print i 

我會離開它作爲一個練習,你把它轉換成Java,因爲這可能與理解爲這是如何工作的幫助。

3

的問題當然是當(i % 3 == 0)&&(i % 5 == 0)是真實的,前兩個條件都還不錯,讓你獲得雙重輸出。解決這個問題的最簡單方法是在前兩種情況下檢查其他條件不成立。即第一個條件爲if((i % 3 == 0)&&(i % 5 != 0)),第二個條件相同。

您的代碼的另一個問題是,如果任何一種情況屬實,您正在打印該數字,但是當它們都不是時,您應該打印它。你可以通過做第四個if條件來檢查這些條件是否都是真的,如果是,就打印i。

現在,如果您已經完成了上述操作,您將看到最終出現了一些代碼重複。如果你仔細想一想,你會發現,通過使用if - else if - else if - else,你可以很容易地解決這個問題,這可以讓你在檢查當前條件時假設前面的條件是錯誤的。

+0

謝謝你的回答,我明白了 – bentham 2010-07-10 21:48:58

1

使用else if使條件不重疊。

2

嗯,我想我會僅提示:按正確的順序的

  1. 想:如果一個數是3的倍數,會發生什麼,而且(3和5)?
  2. 有一個else if聲明。