Java の switch 文

Java の switch 文とは

switch 文は Java の制御文のひとつです。

switch 文は指定した変数が特定の値をとる場合に、実行するコードを指定できます。

変数は switch で指定して、条件となる値は case に指定します。case 値: に続けて、 実行するコードを指定できます。コードブロックは break まで実行されます。

switch( 変数 ) {
case 値1:
case 値2:
  // 値1 か値 2 のときここが実行される
  break;
case 値3:
  // 値3 のときにここが実行される
  break;
default:
  // 値1, 2, 3 のいずれでもない時にここが実行される
  break;               
}

実行例は次のとおりです。

public class TestApp {
  public static void main(String[] args) {
    int day = 3;

    switch (day) {
      case 0:
        System.out.println("Sun");
        break;
      case 1:
        System.out.println("Mon");
        break;
      case 2:
        System.out.println("Tue");
        break;
      case 3:
        System.out.println("Wed");
        break;
      case 4:
        System.out.println("Thu");
        break;
      case 5:
        System.out.println("Fri");
        break;
      case 6:
        System.out.println("Sat");
        break;
      default:
        System.out.println("Unknown");
        break;
    }
  }
}

実行結果は次です。

Wed

変数 day は 3 にセットされていたので、 16行目の Wed という文字を出力するコードが実行されています。

switch 文では break 文を忘れないように注意

注意しないといけないのは、必要なコードブロックを実行したら忘れずに break 文を書く必要があるということです。

そうしないと、次々とプログラムが実行されてしまいます。

例えば上の例で、break 文が書いていなかったとします。

public class TestApp {
  public static void main(String[] args) {
    int day = 3;

    switch (day) {
      case 0:
        System.out.println("Sun");
        //break;
      case 1:
        System.out.println("Mon");
        //break;
      case 2:
        System.out.println("Tue");
        //break;
      case 3:
        System.out.println("Wed");
        //break;
      case 4:
        System.out.println("Thu");
        //break;
      case 5:
        System.out.println("Fri");
        //break;
      case 6:
        System.out.println("Sat");
        //break;
      default:
        System.out.println("Unknown");
        //break;
    }
  }
}

すると、16行目を実行したあと、続けて 19行目、22行目・・・と下まで実行してしまい、実行結果は次のようになります。

Wed
Thu
Fri
Sat
Unknown

これを switch 文のフォール・スルー (fall through) といいます。

この手のバグは非常に発生しやすく、見つけにくいことで悪名高いものとして知られています。

フォール・スルーを利用してコードを書くこともできますが、その場合は、if 文で同様のコードが書けないか検討するのも良いでしょう。

switch 文の case ラベルを並べて書く

上では、意図しないフォールスルーを防ぐために break 文を忘れないように注意しましょう、ということを書きました。

特に case ラベルに続いて実行するコードがない場合は、下記のように case を並べて書くことも読みやすいので便利です。

public class TestApp {
    public static void main(String[] args) {
        int day = 3;
        switch (day) {
            case 0: // Sun
            case 6: // Sat
                System.out.println("Weekend");
                break;
            default: // Mon - Fri
                System.out.println("Weekday");
                break;
        }
    }
}

以上、Java の制御文の一つである switch 文の書き方と、注意点について説明しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門