1. n = 5 のとき 1 2 Fizz 4 Buzz
  2. n = 15 のとき末尾が FizzBuzz
  3. n = 3 のとき 1 2 Fizz
  4. n = 1 のとき 1 (末尾スペースなし)
  5. n = 10 のとき末尾が Buzz
コース一覧
Java入門:基礎文法編
FizzBuzz 完成

Java入門:基礎文法編

変数、制御構文、メソッド、クラス、継承、インターフェースなど Java とオブジェクト指向の基礎を、コードを書きながら学べる無料コースです。プログラミング初学者や、業務システム開発で Java を扱う必要がある社会人を対象としています。約 17 時間 (1 日 30 分 × 34 日) で 69 レッスンを修了でき、修了後は Spring などのフレームワーク学習や Java 認定試験への準備が無理なく進められます。

1
Hello, Java
01. はじめての Java プログラム5分
02. 複数行の出力5分
03. 変数を使った自己紹介5分
04. コメントを書く5分
05. 第 1 章まとめクイズ5分
2
変数と演算
01. 変数を宣言する5分
02. データ型の使い分け5分
03. 変数とデータ型クイズ5分
04. 四則演算と剰余5分
05. 税込価格を計算する5分
06. インクリメントとデクリメント5分
07. 比較演算子5分
08. 論理演算子5分
09. 演算子の優先順位5分
10. 文字列の連結5分
11. 型変換 (キャスト)5分
12. 第 2 章 まとめクイズ5分
3
条件分岐
01. if 文の基本5分
02. if-else 文5分
03. else if で複数分岐5分
04. 成績判定プログラム12分
05. うるう年を判定する5分
06. switch 文5分
07. 三項演算子5分
08. じゃんけんの勝敗判定15分
09. FizzBuzz の判定部分5分
10. 第 3 章 まとめクイズ5分
4
繰り返し
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分
5
メソッド
01. メソッドを定義する5分
02. 引数を受け取るメソッド5分
03. 戻り値を返す5分
04. 複数の引数を取るメソッド5分
05. メソッドのオーバーロード5分
06. メソッドクイズ5分
07. BMI を計算するメソッド5分
08. 第 5 章 まとめクイズ5分
6
配列
01. 配列の基本5分
02. 配列の要素にアクセス5分
03. 配列を for で走査5分
04. Javaで配列の合計・平均を求める方法(forループ)5分
05. 配列の平均5分
06. 配列の最大値5分
07. 配列の線形探索12分
08. 拡張 for ループ5分
09. 配列クイズ5分
10. 第 6 章 まとめクイズ5分
7
クラスとオブジェクト
01. クラスを定義する5分
02. クラスにフィールドを持たせる12分
03. クラスにメソッドを定義する5分
04. インスタンスを作る5分
05. コンストラクタ5分
06. this キーワード5分
07. カプセル化 (private と getter)12分
08. Person クラスを作る5分
09. Product クラスで税込価格15分
10. 銀行口座クラス15分
11. toString のオーバーライド5分
12. クラスとオブジェクト クイズ5分
13. Java 入門 最終クイズ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 番目以降の前に置く)

入出力例

fizzbuzzList(5) → "1 2 Fizz 4 Buzz" fizzbuzzList(15) → "1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz" fizzbuzzList(3) → "1 2 Fizz" fizzbuzzList(1) → "1" fizzbuzzList(10) → "1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz"

ヒント

判定の順番は `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 の処理をまとめて名前を付ける仕組み、メソッドの定義と呼び出しを学ぼう。

  • 配列の基本

    Java の配列の宣言、長さの取り方、インデックスでの要素アクセスを学び、最初の要素を返すメソッドを書いてみよう。

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

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

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

メモ

FizzBuzz 完成

⌘S で保存