top / index / prev / next / target / source

2007-07-06 diary: FizzBuzz 問題 - switch分岐版

いがぴょん画像(小) 日記形式でつづる いがぴょんコラム ウェブページです。

old-v2

FizzBuzz 問題 - switch分岐版

では、次に FuzzBuzz実装を switch - case で実装する版を作ってみます。

FizzBuzz 問題 - switch分岐版

では、次に 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 問題 - リファクタリング版の方が実行速度は速くなると予想しています。時間を見つけて計測してみたいと思います。

関連する日記


この日記について