記得2014年在網上看到Thoughtworks的一道筆試題,當時以爲挺有意思,可是沒動手去寫。這幾天又在網上看到了,因而我抽了一點時間寫了下,我把程序運行的結果跟網上的答案對了一下,應該是對的,可是總感受個人代碼應該能夠改進的,可是我不知道怎麼改進了。java
原題是:測試
FizzBuzzWhizzcode
你是一名體育老師,在某次課距離下課還有五分鐘時,你決定搞一個遊戲。此時有100名學生在上課。遊戲的規則是:blog
1. 你首先說出三個不一樣的特殊數,要求必須是個位數,好比三、五、7。遊戲
2. 讓全部學生拍成一隊,而後按順序報數。ci
3. 學生報數時,若是所報數字是第一個特殊數(3)的倍數,那麼不能說該數字,而要說Fizz;若是所報數字是第二個特殊數(5)的倍數,那麼要說Buzz;若是所報數字是第三個特殊數(7)的倍數,那麼要說Whizz。get
4. 學生報數時,若是所報數字同時是兩個特殊數的倍數狀況下,也要特殊處理,好比第一個特殊數和第二個特殊數的倍數,那麼不能說該數字,而是要說FizzBuzz, 以此類推。若是同時是三個特殊數的倍數,那麼要說FizzBuzzWhizz。it
5. 學生報數時,若是所報數字包含了第一個特殊數,那麼也不能說該數字,而是要說相應的單詞,好比本例中第一個特殊數是3,那麼要報13的同窗應該說Fizz。若是數字中包含了第一個特殊數,那麼忽略規則3和規則4,好比要報35的同窗只報Fizz,不報BuzzWhizz。class
如今,咱們須要你完成一個程序來模擬這個遊戲,它首先接受3個特殊數,而後輸出100名學生應該報數的數或單詞cli
public class Test2 { //單詞 public static String[] wordStr = { "Fizz", "Buzz", "Whizz" }; //特殊數字 public static int[] specialNum = { 3, 5, 7 }; public static void main(String[] args) { for (int i = 1; i <= 100; i++) { if (i > 10) { if (i % 10 == specialNum[0] || i / 10 == specialNum[0]) { // 顯示規則5 System.out.println(wordStr[0]); } else { //規則三、4 getResult(i, true); } } else { getResult(i, true); } } } // 對單個數字進行測試 public static void getUnitTestResult(int i) { if (i > 10) { if (i % 10 == specialNum[0] || i / 10 == specialNum[0]) { // 顯示規則5 System.out.println(wordStr[0]); } else { getResult(i, true); } } else { getResult(i, true); } } //得到結果 public static void getResult(int i, boolean isCompute) { if (isCompute) { // 規則3 if (i % specialNum[0] == 0) { System.out.println(wordStr[0]); return; } if (i % specialNum[1] == 0) { System.out.println(wordStr[1]); return; } if (i % specialNum[2] == 0) { System.out.println(wordStr[2]); return; } // 規則4 if (i % specialNum[0] == 0 && i % specialNum[1] == 0) { System.out.println(wordStr[0] + wordStr[1]); return; } else if (i % specialNum[0] == 0 && i % specialNum[2] == 0) { System.out.println(wordStr[0] + wordStr[2]); return; } else if (i % specialNum[1] == 0 && i % specialNum[2] == 0) { System.out.println(wordStr[1] + wordStr[2]); return; } else if (i % specialNum[0] == 0 && i % specialNum[1] == 0 && i % specialNum[2] == 0) { System.out.println(wordStr[0] + wordStr[1] + wordStr[2]); return; } System.out.println(i); } else { System.out.println(i); } } }
運行結果
1 2 Fizz 4 Buzz Fizz Whizz 8 Fizz Buzz 11 Fizz Fizz Whizz Fizz 16 17 Fizz 19 Buzz Fizz 22 Fizz Fizz Buzz 26 Fizz Whizz 29 Fizz Fizz Fizz Fizz Fizz Fizz Fizz Fizz Fizz Fizz Buzz 41 Fizz Fizz 44 Fizz 46 47 Fizz Whizz Buzz Fizz 52 Fizz Fizz Buzz Whizz Fizz 58 59 Fizz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz Fizz 74 Fizz 76 Whizz Fizz 79 Buzz Fizz 82 Fizz Fizz Buzz 86 Fizz 88 89 Fizz Whizz 92 Fizz 94 Buzz Fizz 97 Whizz Fizz Buzz
對單個數字進行測試
public class TestUnit { public static void main(String[] args) { Test2.getUnitTestResult(7); } }