Javaのswitch文の基本
「ある値がどれに当てはまるかで処理を切り替える」ための文法です。if-elseをズラッと並べるより、候補がはっきり決まっているときに見通しよく書けます。
switch (式) {
case 値1:
// 値1のときの処理
break;
case 値2:
// 値2のときの処理
break;
default:
// どれにも当てはまらないとき
}
Java使いどころと基本ルール
- 使いどころ: 選択肢が決まっているとき(例:1〜7の曜日、”yes”/”no”、メニュー番号など)。
- 評価の仕方: switchの「式」を計算し、caseの値と「一致する場所」から処理が始まります。
- breakの役割: 各caseの最後で処理を止めるもの。忘れると次のcaseへ処理が流れ続けます(これを「フォールスルー」と呼びます)。
- defaultの役割: どのcaseにも当てはまらないときの「保険」。省略可能ですが、入れておくと安全です。
- 使える型: int, char, byte, short, String, enum(doubleやlongは不可)。
- caseの値: 定数のみ。変数や計算式は不可(例:case x+1; は書けない)。
例題で理解する
例題1:数字で曜日を表示(1〜7以外はエラー)
int day = 3;
switch (day) {
case 1:
System.out.println("月曜日");
break;
case 2:
System.out.println("火曜日");
break;
case 3:
System.out.println("水曜日");
break;
case 4:
System.out.println("木曜日");
break;
case 5:
System.out.println("金曜日");
break;
case 6:
System.out.println("土曜日");
break;
case 7:
System.out.println("日曜日");
break;
default:
System.out.println("1〜7の数字を入力してください");
}
Java- ポイント: 候補が明確(1〜7)なのでswitchが向いている。
例題2:複数の値で同じ処理(偶数・奇数)
int num = 4;
switch (num) {
case 1:
case 3:
case 5:
case 7:
case 9:
System.out.println("奇数");
break;
case 2:
case 4:
case 6:
case 8:
case 10:
System.out.println("偶数");
break;
default:
System.out.println("想定外の数値です");
}
Java- ポイント: 同じ結果にしたいcaseは「並べる」だけでOK。最初に一致した場所からbreakまで実行。
例題3:文字列でメニュー選択(String対応)
String cmd = "help";
switch (cmd) {
case "start":
System.out.println("アプリを開始します");
break;
case "stop":
System.out.println("アプリを停止します");
break;
case "help":
System.out.println("ヘルプを表示します");
break;
default:
System.out.println("不明なコマンドです");
}
Java- ポイント: JavaはStringにも対応。ユーザー入力のコマンド分岐に便利。
例題4:breakを忘れるとどうなる?(フォールスルー)
int level = 2;
switch (level) {
case 1:
System.out.println("初級");
case 2:
System.out.println("中級");
case 3:
System.out.println("上級");
break;
default:
System.out.println("レベル不明");
}
Java- 結果: levelが2でも「中級」「上級」と2つ表示される。case2でbreakがないためcase3へ「流れる」。
- 学び: 意図してない連続実行になりやすいので、基本は各caseにbreakを書く。
例題5:意図的なフォールスルーで範囲をまとめる
int score = 85;
switch (score / 10) { // 10点刻みに分類
case 10:
case 9:
System.out.println("評価:A");
break;
case 8:
case 7:
System.out.println("評価:B");
break;
case 6:
case 5:
System.out.println("評価:C");
break;
default:
System.out.println("評価:D");
}
Java- ポイント: 「score/10」で切り捨ててグループ化。Aは90〜100、Bは70〜89…のように簡潔に書ける。
つまずきやすいポイントと対策
- breakの書き忘れ:
- 対策: まず「各caseの最後にbreak」を癖づける。意図的にフォールスルーする場合はコメントで明示。
- 型の不一致:
- 対策: switch(式)とcaseの値は同じ型で比較される。StringならcaseもString、intなら整数。
- defaultの欠落:
- 対策: 仕様で「想定外はありえない」と決まっていない限り、defaultで安全なメッセージや処理を用意。
- 動的値をcaseに書いてしまう:
- 対策: caseにはリテラルや定数だけ。動的判断が必要ならif-elseを使う。
練習課題
- 課題1: ユーザーが入力した月番号(1〜12)から季節(春/夏/秋/冬)を表示するプログラムをswitchで作る。
- ヒント: 3,4,5→春/6,7,8→夏/9,10,11→秋/12,1,2→冬。複数のcaseを並べる。
- 課題2: 自販機メニュー(”cola”, “tea”, “water”)をStringのswitchで処理し、価格を表示。その他は「在庫なし」。
- 課題3: 点数を受け取り、例題5のようにA〜Dの評価を表示。score/10を使ってグループ化。
- 課題4: enumを使って「Small/Medium/Large」のサイズをswitchで分岐して、送料を表示。
enum Size { SMALL, MEDIUM, LARGE }
解答と解説
課題1:月番号から季節を表示
int month = 4;
switch (month) {
case 3:
case 4:
case 5:
System.out.println("春");
break;
case 6:
case 7:
case 8:
System.out.println("夏");
break;
case 9:
case 10:
case 11:
System.out.println("秋");
break;
case 12:
case 1:
case 2:
System.out.println("冬");
break;
default:
System.out.println("1〜12の数字を入力してください");
}
Java解説
- 同じ季節に属する月を並べて書くことで、まとめて処理できる。
breakを忘れると次の季節まで流れてしまうので必ず書く。defaultは「想定外の入力」に備える安全策。
課題2:自販機メニュー(String)
String drink = "tea";
switch (drink) {
case "cola":
System.out.println("150円です");
break;
case "tea":
System.out.println("120円です");
break;
case "water":
System.out.println("100円です");
break;
default:
System.out.println("在庫なし");
}
Java解説
- Javaの
switchは文字列(String)も扱える。 - ユーザー入力をそのまま分岐に使えるので便利。
- caseの値は定数文字列でなければならない。
課題3:点数から評価(A〜D)
int score = 85;
switch (score / 10) { // 10点刻みで分類
case 10: // 100点
case 9: // 90〜99点
System.out.println("評価:A");
break;
case 8:
case 7:
System.out.println("評価:B");
break;
case 6:
case 5:
System.out.println("評価:C");
break;
default:
System.out.println("評価:D");
}
Java解説
score / 10で「十の位」を取り出す。- 90〜100点は「9または10」なので同じ処理にまとめられる。
- こうすると「範囲ごとの評価」を簡潔に書ける。
課題4:enumを使ったサイズ分岐
enum Size { SMALL, MEDIUM, LARGE }
public class Main {
public static void main(String[] args) {
Size s = Size.MEDIUM;
switch (s) {
case SMALL:
System.out.println("送料:200円");
break;
case MEDIUM:
System.out.println("送料:400円");
break;
case LARGE:
System.out.println("送料:600円");
break;
default:
System.out.println("サイズ不明");
}
}
}
Java解説
enumは「決まった選択肢」を表す型。- switchと組み合わせると「候補が限定されている」場合に非常に読みやすい。
- caseには
enumの定数名をそのまま書く。
まとめ
- 課題1 → 複数のcaseを並べて季節を分類。
- 課題2 → Stringを使ったメニュー分岐。
- 課題3 → 数値をグループ化して評価。
- 課題4 → enumで選択肢を限定して分岐。
👉 どれも「if-elseで書けるけど、switchを使うとスッキリする」例です。
