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

本記事は、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を続けて書くと共通の処理へ進む
switch (month)の値とcaseの値を照らし合わせる- 一致したcaseから下へ処理を進める
- 次のcaseまでに
breakがなければ、そのまま共通の処理へ進む - 共通処理の後の
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を分けて書き直す
確認問題
monthが12、1、2なら「冬」、3、4、5なら「春」と表示するswitch文を書いてください。共通の処理は各季節で1回だけ書きます。numberが1、3、5なら「奇数」と表示するswitch文を書いてください。caseをまとめて使いましょう。- caseをまとめたコードで、最初のcaseの直後に
break;を書くと何が起こるか説明してください。
演習後の確認:こちらのページを使って、共通処理の位置とbreakの位置を見直せます。先に自分でコードを書いてから確認してください。
あわせて読みたい関連記事
- Javaのswitch文とは?決まった値ごとに処理を分ける書き方
- Javaのelse ifとは?複数条件を上から順番に判定する考え方
- Javaの条件式の作り方|「以上・未満・かつ・または」をプログラムに変換する
まとめ
複数の値で同じ処理を行う場合は、caseを続けて書き、その下に共通処理を置けます。このとき、共通処理に到達するまでのcaseにはbreakを書かず、共通処理の後でswitch文を抜けます。
フォールスルーは、breakの書き忘れでは困ることがありますが、caseをまとめる場面では意図して使う仕組みです。値ごとに処理を分けるのか、複数の値を同じ処理へ集めるのかを意識して書きましょう。