1. switch は何をするもの?
- 「変数(や式)の値を見て、値ごとに処理を切り替える」ための構文です。
- 候補が複数あるときに
if-elseより読みやすく書けます。
2. 基本の書き方(いちばんシンプルな形)
switch (式) {
case 値1:
// 値1のときの処理
break;
case 値2:
// 値2のときの処理
break;
default:
// どれにも当てはまらないときの処理
}
Javaポイント:break; を忘れると、その後の case の処理も続けて実行されてしまいます(フォールスルー)。
3. 動きのイメージ
評価 -> switch(式)
|
---------------------
| | | | |
case1 case2 case3 ... default
| | | |
処理A 処理B 処理C 処理D
| | | |
(breakで抜ける) (最後に抜ける)
4. 例1:整数で分岐(基本)
int num = 2;
switch (num) {
case 1:
System.out.println("1 です");
break;
case 2:
System.out.println("2 です");
break;
case 3:
System.out.println("3 です");
break;
default:
System.out.println("1〜3 以外です");
}
Java結果:2 です が出力されます。
5. break を忘れるとどうなる?(フォールスルーの例)
int num = 2;
switch (num) {
case 1:
System.out.println("case 1");
case 2:
System.out.println("case 2");
case 3:
System.out.println("case 3");
}
Java結果:
case 2
case 3
→ case 2 に一致した後、break がないので下の case 3 の処理まで続けて実行されます。
フォールスルーは意図的に使う場面(次で説明)もありますが、多くはバグの原因になります。初心者は基本的に 各 case の最後に break; を書くクセをつけましょう。
6. 例2:同じ処理を複数の値でまとめる(便利)
int num = 3;
switch (num) {
case 1:
case 3:
case 5:
System.out.println("奇数です");
break;
case 2:
case 4:
System.out.println("偶数です");
break;
default:
System.out.println("1〜5 以外です");
}
Javanum == 3 のとき "奇数です" が出ます。複数の case を連続して書くことで、同じ処理にまとめられます。
7. 使える型(よくある制約)
- 使えるもの:
byte,short,int,char,String,enum(列挙型)。 - 使えないもの(そのままはNG):
long,float,double,boolean(booleanは if で扱うのが普通)。 caseに指定する値は 定数(リテラルやfinal定数)。変数の値をそのまま書けません。
8. 例3:String を使った switch(名前で分岐する例)
String fruit = "apple";
switch (fruit) {
case "apple":
System.out.println("りんごです");
break;
case "banana":
System.out.println("バナナです");
break;
default:
System.out.println("不明なフルーツ");
}
Java9. 例4:enum(列挙型)と組み合わせる(実務でもよく使う)
enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
Day today = Day.WED;
switch (today) {
case SAT:
case SUN:
System.out.println("週末");
break;
default:
System.out.println("平日");
}
Java10. よくある間違い(初心者がやりがち)
break;を忘れて予期しない複数処理が実行される。caseに変数を書いてしまう(case x:は不可。定数が必要)。switchの式に使えない型(たとえばlong)を使おうとしてコンパイルエラーになる。defaultを必ず書くべきと考える人がいるが、必須ではない(ただし書いておくと安全)。
11. 実践練習問題
問題1
変数 score が 90 以上なら "A", 80〜89 なら "B", 70〜79 なら "C", それ以外は "F" を出すプログラムを switch で書いてください。
(ヒント:score / 10 を使うと範囲で分けやすい)
解答例1
int score = 85;
switch (score / 10) {
case 10:
case 9:
System.out.println("A");
break;
case 8:
System.out.println("B");
break;
case 7:
System.out.println("C");
break;
default:
System.out.println("F");
}
Java問題2
day という String が "Mon", "Tue", … の値を取り、週末なら "Weekend", 平日なら "Weekday" を出す switch を書いてください。
解答例2
String day = "Sat";
switch (day) {
case "Sat":
case "Sun":
System.out.println("Weekend");
break;
default:
System.out.println("Weekday");
}
Java問題3(ややチャレンジ)
列挙型 TrafficLight { RED, YELLOW, GREEN } を作り、TrafficLight の値に応じて "止まれ", "注意", "進め" を出す switch を書いてください。
解答例3
enum TrafficLight { RED, YELLOW, GREEN }
TrafficLight light = TrafficLight.YELLOW;
switch (light) {
case RED:
System.out.println("止まれ");
break;
case YELLOW:
System.out.println("注意");
break;
case GREEN:
System.out.println("進め");
break;
}
Javaまとめ(初心者が覚えておくべき最重要ポイント)
switchは「値を候補と比較して処理を切り替える」ために使う。- 各
caseの最後には原則break;を書く(フォールスルー回避)。 defaultは「どれにも当てはまらない場合」の処理。つけておくと安全。caseに書くのは定数。式や変数は使えない(例外的にコンパイル時定数はOK)。- 型の制約に注意(
Stringとenumは OK、longやdoubleは NG)。
