top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
では、次に FuzzBuzz実装を switch - case で実装する版を作ってみます。
では、次に FuzzBuzz実装を switch - case で実装する版を作ってみます。
※注意: ここで挙げている例は ブラックユーモアです。
3と5の倍数ということで、最小公倍数である 15を導出します。その上で switch - case により分岐すれば、結果として同じ挙動をさせることができます。 FizzBuzzShort01.java
/**
* FizzBuzz: イギリスの学校の子供たちの遊び
*
* 1から100までの数をプリントする。<br>
* ・3の倍数のときは数の代わりに「Fizz」とプリントする。<br>
* ・5の倍数のときは数の代わりに「Buzz」とプリントする。<br>
* ・3と5両方の倍数の場合には数の代わりに「FizzBuzz」とプリントする。
*/
public class FizzBuzzSwitch01 {
/**
* エントリポイント。
*
* @param args
* コマンドライン引数。このプログラム内では利用されない。
*/
public static void main(final String[] args) {
new FizzBuzzSwitch01().process();
}
/**
* このクラスの主処理。
*/
public void process() {
for (int number = 1; number <= 100; number++) {
// 生成された文字列をプリントする。
System.out.println(getFizzBuzzMessage(number));
}
}
/**
* 与えられた数に対応する FizzBuzzメッセージを取得する。
*
* ・3の倍数のときは「Fizz」を戻す。<br>
* ・5の倍数のときは「Buzz」を戻す。<br>
* ・3と5両方の倍数の場合には「FizzBuzz」を戻す。<br>
* ・いずれにも該当しない場合には数を戻す。
*
* @param argNumber
* 対象となる数。
* @return メッセージ。
* 3の倍数のときは「Fizz」、5の倍数のときは「Buzz」、3と5両方の倍数の場合には「FizzBuzz」、いずれにも該当しない場合には数。
*/
public static String getFizzBuzzMessage(final int argNumber) {
// TODO:謎のマジックナンバー 15が導出されてしまっています。
switch (Math.abs(argNumber % 15)) {
case 0:
// 3と5両方の倍数 (つまり15の倍数) の場合には「FizzBuzz」を戻す。
return "FizzBuzz";
case 3:
case 6:
case 9:
case 12:
// 3の倍数のときは数の代わりに「Fizz」を戻す。
return "Fizz";
case 5:
case 10:
// 5の倍数のときは「Buzz」を戻す。
return "Buzz";
default:
// いずれにも該当しない場合には数を戻す。
return String.valueOf(argNumber);
}
}
}
意外かも知れませんが、switch - case は実行コストが結構高いのです。FizzBuzz 問題 - リファクタリング版の方が実行速度は速くなると予想しています。時間を見つけて計測してみたいと思います。
関連する日記