Java入門⑦ switch文 ── 選択肢が多いときの分岐

前回は「if文(もし〜なら)」をやりました。

今回は、もうひとつの分かれ道、switch文(スイッチぶん)です。選択肢がたくさんあるときに、すっきり書けます。

switch文とは、「この値だったら、これ」という、値ごとの仕分けです。

なぜ、もうひとつの分岐があるのか

if文でも、else if でたくさんの分岐が書けました。でも、こういう場合を考えてみてください。

「曜日の番号(1〜7)によって、曜日名を表示する」

if文だと、day == 1day == 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文 です。プログラムが本領を発揮する、第二の山場です。