コース一覧
    Java入門:繰り返しとメソッド
    FizzBuzz 完成

    Java入門:繰り返しとメソッド

    forやwhileの繰り返しとメソッドを学び、処理を反復と部品に分けて書けるようにします。

    1
    繰り返し
    01. for 文の基本5分
    02. 1 から N までの合計5分
    03. 九九の段を作る5分
    04. while 文5分
    05. カウントダウン5分
    06. do-while 文5分
    07. 二重ループ5分
    08. break と continue5分
    09. FizzBuzz 完成5分
    10. 繰り返しクイズ5分
    11. 第 4 章 まとめクイズ5分
    2
    メソッド
    01. メソッドを定義する5分
    02. 引数を受け取るメソッド5分
    03. 戻り値を返す5分
    04. 複数の引数を取るメソッド5分
    05. メソッドのオーバーロード5分
    06. メソッドクイズ5分
    07. BMI を計算するメソッド5分
    08. 第 5 章 まとめクイズ5分

    FizzBuzz 完成

    15 のときだけ、なぜか Fizz で止まる

    FizzBuzz を書いて最初につまずくのは、たいていここです。3 の倍数の判定を上に置くと、15 はその時点で捕まってしまい、"FizzBuzz" の枝には一生たどり着きません。

    原因は if / else if の性質です。上から順に評価され、最初に当たった 1 つだけが実行されて、残りは見向きもされません。小さい数字で試しているうちは正しく動くので、15 を入れるまで気づきません。

    広い条件を先に書くと、細かい条件に届かない

    数字と言葉を変えて、同じ事故を再現してみます。

    Java

    // 6 の倍数なのに Two で捕まる
    if (i % 2 == 0) {
        System.out.println("Two");
    } else if (i % 6 == 0) {
        System.out.println("Six");   // ここには来ない
    }

    6 は 2 の倍数でもあるので、上の枝で拾われて下には流れません。直し方はひとつで、条件の厳しい順に並べることです。6 の判定を上に持ち上げれば、6 は Six、4 は Two と正しく分かれます。

    FizzBuzz でも起きているのは同じことです。15 は 3 の倍数でも 5 の倍数でもあるので、15 を先頭に置くか、3 の倍数かつ 5 の倍数という形で先頭に書きます。

    倍数の判定に使うのは剰余演算子 % でした。割ったあまりが 0 なら、割り切れたということです。

    Java

    System.out.println(9 % 3);   // 0 なので 3 の倍数
    System.out.println(10 % 3);  // 1 なので 3 の倍数ではない

    i <= n か i < n か

    fizzbuzzList(5) は 5 まで含めた結果を返します。for (int i = 1; i < n; i++) と書くと 4 で止まり、"1 2 Fizz 4" になってテストが落ちます。for を書いたら、最初の i は何か、最後の i は何かを口に出して確かめる。これだけで境界のずれはほぼ防げます。

    やってみよう

    Solution.fizzbuzzList(int n) を完成させましょう。1 から n まで回して、各数字を FizzBuzz のルールで置き換えた文字列を、半角スペース区切りでつなぎます。

    判定の順番を決めるのが山場です。書く前に、i が 15 のときにどの枝を通ってほしいかを紙に書いてから始めてください。

    つなぎ方は「カウントダウン」の回と同じ問題が出ます。区切りを足しながらつなぐと末尾に 1 つ余るので、あとから落とすか、2 個目以降の前に置くか、どちらかで手当てします。fizzbuzzList(1) のように要素が 1 個だけのケースが、その手当てを確かめる一番よいテストです。

    要件

    1. クラス名は Solution、メソッド名は fizzbuzzList、引数は int n 1 つ、戻り値の型は String
    2. 1 から n までを for ループで回し、各値を FizzBuzz ルールで変換した文字列を 半角スペース区切り でつなげること
    3. 末尾に余分なスペースを残さないこと (trim() を使うか、先頭判定方式でスペースを 2 番目以降の前に置く)

    ヒント

    判定の順番は `i % 15 == 0` を最初にしましょう。`i % 3 == 0` を先に書くと `15` のときも `"Fizz"` になってしまいます

    `for (int i = 1; i <= n; i++)` のように、ループ条件は `<=` を使って `n` を含めます。`<` だと `n` 自身が処理されません

    `String result = "";` で空文字列を用意して `result += ...;` で追記していく方法と、`StringBuilder` で `append` する方法の 2 通りがあります。シンプル版なら `return result.trim();` で末尾の半角スペースを取り除けます

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

    関連レッスン

    • 繰り返しクイズ

      for / while / do-while の挙動の違い、break と continue の役割、無限ループの原因を 4 択クイズで総ざらいする繰り返しの章末まとめ。

    • 第 4 章 まとめクイズ

      第 4 章「繰り返し」で学んだ for / while / do-while / 入れ子ループ / break・continue / FizzBuzz を、総合的に 1 問のクイズで総ざらいする章末まとめ。

    • メソッドを定義する

      Java の処理をまとめて名前を付ける仕組み、メソッドの定義と呼び出しを学ぼう。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 評価出力品質を数値化して継続改善する活動
    • 剰余演算子% で割り算の余りを得る演算子
    • 演算子//は切り捨て除算(7 // 2 = 3)。
    • テストバグを見つける工程
    • クラスデータと振る舞いを束ねる単位
    • メソッドクラスに属する関数
    • 引数位置引数=順番で渡す。
    • 戻り値呼び出し元への返答を表す点線矢印
    main.java
    エディタを読み込んでいます

    メモ

    FizzBuzz 完成

    ⌘S で保存