Java入門⑦ switch文 ── 選択肢が多いときの分岐
Java入門⑦ switch文 ── 選択肢が多いときの分岐
前回は「if文(もし〜なら)」をやりました。
今回は、もうひとつの分かれ道、switch文(スイッチぶん)です。選択肢がたくさんあるときに、すっきり書けます。
switch文とは、「この値だったら、これ」という、値ごとの仕分けです。
なぜ、もうひとつの分岐があるのか
if文でも、else if でたくさんの分岐が書けました。でも、こういう場合を考えてみてください。
「曜日の番号(1〜7)によって、曜日名を表示する」
if文だと、day == 1、day == 2… と、同じくらべを何度も書くことになり、くどくなります。
こういう「ひとつの値を、いろんな候補とくらべる」場面で、switch文が活躍します。料理でいうなら「注文を聞いて、メニューごとに作るものを変える」ような仕分けです。
書き方を見てみる
曜日の例を、switch文で書いてみます。
int day = 3;
switch (day) {
case 1:
System.out.println("月曜日");
break;
case 2:
System.out.println("火曜日");
break;
case 3:
System.out.println("水曜日");
break;
default:
System.out.println("その他の曜日");
break;
}
day は3なので、「水曜日」と表示されます。
形を見てみましょう。
switch (day)… このdayの値を仕分けますよ、という宣言case 1:… 「もし1だったら」default:… 「どれにも当てはまらなかったら」(if文の else にあたる)
switch のカッコの中の値が、上から case の値とくらべられ、一致したところの処理が実行されます。
break を忘れずに
switch文には、大事なルールがあります。各 case の最後に、break; をつけることです。
case 3:
System.out.println("水曜日");
break; // ← これが必要
break は「ここで仕分けを終わり、switchから抜ける」という意味です。
これを忘れると、Javaでは次の case に、そのまま流れ込んでしまいます。「水曜日」を表示した後、止まらずに「その他の曜日」まで表示されてしまう、といった具合です。エラーにはならず、おかしな動きになるので、かえって厄介です。
if文と、どう使い分けるか
ここが大事なところです。
- if文 … 「18以上か」「60点以上か」のような、範囲やくらべごとが得意
- switch文 … 「1ならこれ、2ならこれ」のような、決まった値ごとの仕分けが得意
「点数が80以上なら合格」はif文向き(範囲)。
「曜日番号ごとに曜日名」はswitch文向き(決まった値)。
「値がきっちり決まっている仕分けなら、switchの方がすっきりする」。そんな感覚で選べば大丈夫です。
つまずきポイント
学生がつまずくのは、やはり break の付け忘れ です。
case 1:
System.out.println("月曜日");
// break を忘れている! → 次の case に流れ込む
if文にはなかったルールなので、switchに切り替えた途端、忘れがちです。しかもJavaの場合、エラーにならずおかしな動きになるので、原因に気づきにくい。「caseを書いたら、breakもセット」と、ペアで覚えてしまうのがコツです。
まとめ
switch文は、ひとつの値を、候補ごとに仕分けする分岐。
switch (値) {
case 1:
// 1のときの処理
break;
default:
// どれにも当てはまらないとき
break;
}
caseで「もし○○だったら」、defaultで「それ以外」- 各 case の最後に
break;を忘れない(忘れると次に流れ込む) - 範囲のくらべは if文、決まった値の仕分けは switch文
次回は、同じことを何度もくり返す for文 です。プログラムが本領を発揮する、第二の山場です。

