對Thoughtworks的有趣筆試題實踐

記得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);
	}

}
相關文章
相關標籤/搜索