Javaのswitch文で複数のcaseをまとめるには?月番号から季節を表示する方法

最終更新日

Schoo Java入門 初級【2026年版】

本記事は、Schooの「Java入門 初級【2026年版】」第3回「条件分岐・論理演算子」を学んだあとに、複数の値で同じ処理を行うswitch文の書き方を深めたい方向けのステップアップ学習記事です。

ただし、Schooを受講していない方でも、Javaのswitch文を学び始めたばかりであれば読み進められる内容にしています。breakを書かないと起きるフォールスルーと、意図してcaseをまとめる書き方の違いを、月番号と季節を例に整理します。

Schoo コースページ:Java入門 初級【2026年版】

同じ処理をするcaseはまとめられる

月番号から季節を表示する場合、12月・1月・2月はいずれも「冬です」と表示します。3つのcaseに同じSystem.out.printlnを書くこともできますが、caseを続けて書くと、共通の処理を1回にまとめられます。

ファイル名: MainExample.java

public class MainExample {
    public static void main(String[] args) {
        int month = 1;

        switch (month) {
            case 12:
            case 1:
            case 2:
                System.out.println(month + "月:冬です");
                break;
            default:
                System.out.println("月番号は1から12で指定します");
        }
    }
}

実行結果

1月:冬です

monthが1なので、case 1:まで進みます。その下にある「冬です」を表示する処理を実行し、break;でswitch文を抜けます。12、1、2のどれでも、同じ処理にたどり着きます。

caseを続けて書くと共通の処理へ進む

  1. switch (month)の値とcaseの値を照らし合わせる
  2. 一致したcaseから下へ処理を進める
  3. 次のcaseまでにbreakがなければ、そのまま共通の処理へ進む
  4. 共通処理の後のbreakでswitch文を抜ける

この書き方では、case 12:case 1:case 2:の間に実行文を書きません。どの月でも同じ「冬です」を表示するため、処理を置く場所を共有しています。

月番号を変えてcaseのまとまりを確認する

月番号を選ぶと、その月が一致するcase、同じ処理を共有するcase、実行されるコード、表示結果がすぐに更新されます。

実行されるコード

  
表示結果

breakを書かない理由を区別する

breakを書かないと、次のcaseの処理まで続くフォールスルーが起きます。通常は意図しない動きなので注意が必要です。しかし、今回のように複数のcaseから同じ処理へ進ませたい場合は、共通処理の前にあるcaseでは意図してbreakを書きません。

breakを途中に書いた間違い: MainExample.java

public class MainExample {
    public static void main(String[] args) {
        int month = 12;

        switch (month) {
            case 12:
                break;
            case 1:
            case 2:
                System.out.println(month + "月:冬です");
                break;
        }
    }
}

実行結果

何も表示されない

12月ではcase 12:に一致しますが、すぐにbreak;を実行してswitch文を抜けます。そのため、下にある共通処理へ進めません。caseをまとめる場合は、共通処理の直前までbreakを書かないことが重要です。

四季をすべて表示するswitch文

ファイル名: MainExample.java

public class MainExample {
    public static void main(String[] args) {
        int month = 7;

        switch (month) {
            case 12:
            case 1:
            case 2:
                System.out.println(month + "月:冬です");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println(month + "月:春です");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println(month + "月:夏です");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println(month + "月:秋です");
                break;
            default:
                System.out.println("月番号は1から12で指定します");
        }
    }
}

実行結果

7月:夏です

7はcase 7:に一致し、その下にある夏の共通処理を実行します。13のようにどのcaseにも一致しない値は、最後のdefaultで受け取ります。

同じ処理を繰り返す書き方との違い

各caseへ同じ表示処理とbreakを書くことでも動きます。ただし、「冬です」を変更したいときは3か所を直す必要があります。caseをまとめると、共通処理は1か所だけになり、同じ処理をしている月のまとまりが読み取りやすくなります。

書き方向いている場面
caseをまとめる複数の値で完全に同じ処理を行う
caseごとに処理を書く値ごとに表示内容や処理を変える
if・else if値の範囲や大小関係を判定する

よくある間違い

共通処理の前にbreakを書く

一致したcaseでswitch文を抜けてしまい、共通処理へ進めません。まとめたcaseの間にはbreakを書きません。

defaultを季節のcaseの間に置く

defaultもbreakがなければ後ろの処理へ続きます。初めは、すべてのcaseを書いたあとにdefaultを置くと流れを追いやすくなります。

月の範囲をcaseに書く

case month >= 3:のような範囲の条件は書けません。1・2・3のような決まった値にはswitch文、3以上のような範囲にはif文を使います。

自分で試す練習

  • monthを12、3、6、9、13に変えて表示結果を確認する
  • 春のcase群へ「春の予定を確認します」と表示する処理を追加する
  • 12月だけ「年末です」と表示するように、caseを分けて書き直す

確認問題

  1. monthが12、1、2なら「冬」、3、4、5なら「春」と表示するswitch文を書いてください。共通の処理は各季節で1回だけ書きます。
  2. numberが1、3、5なら「奇数」と表示するswitch文を書いてください。caseをまとめて使いましょう。
  3. caseをまとめたコードで、最初のcaseの直後にbreak;を書くと何が起こるか説明してください。

演習後の確認:こちらのページを使って、共通処理の位置とbreakの位置を見直せます。先に自分でコードを書いてから確認してください。

あわせて読みたい関連記事

まとめ

複数の値で同じ処理を行う場合は、caseを続けて書き、その下に共通処理を置けます。このとき、共通処理に到達するまでのcaseにはbreakを書かず、共通処理の後でswitch文を抜けます。

フォールスルーは、breakの書き忘れでは困ることがありますが、caseをまとめる場面では意図して使う仕組みです。値ごとに処理を分けるのか、複数の値を同じ処理へ集めるのかを意識して書きましょう。

シェアする