switch文

変数の値や式の結果の値によって処理の流れを分岐します。

switch文の書式は次の通りです。

switch (式あるいは変数){
  case 定数1 : 処理1; break;
  case 定数2 : 処理2; break;
   .
   .
  default : 上記以外のときの処理;
}

式あるいは変数の値と一致する定数があれば、その定数に続いて示された処理を実行します。各処理の最後にはbreak文を必ず入力しておきます。

このbreak文はswitch文を抜け、次の処理に進むことを指示するものです。

もし、その値と一致する定数が示されていないときはdefault(デフォルトと読む)文による処理の指示があればそれを実行します。default文での指示がない場合は何もせず、次の処理に進みます。

swicth文はif文と異なり、比較演算などの論理式の真偽で処理を分岐できません。式や変数の値で処理の分岐を指示します。

使用例

つぎのプログラムは「入力された数が0から3の整数のとき、入力された数を示すメッセージ表示し、それ以外のときは範囲外といった文を表示する」ものです。

import java.io.*;
import java.text.*;

class Switch_ex {
  public static void main(String args[]){
    int x;

    BufferedReader BR = new BufferedReader(new InputStreamReader(System.in));
    DecimalFormat DF = new DecimalFormat();
    
    System.out.print("数値を入力してください : ");
    
    try {
      String s = BR.readLine();
      Number Num = DF.parse(s);
      x = Num.intValue();
    }
    catch (IOException e) { x = 0; }
    catch (ParseException e) { x = 0; }
    
    switch (x) {
      case 0 : System.out.println("入力された数値は0です。もしかすると例外かも");
      case 1 : System.out.println("入力された数値は1です。");
      case 2 : System.out.println("入力された数値は2です。");
      case 3 : System.out.println("入力された数値は3です。");
      default : System.out.println("入力された数は0から3以外です");
    }
  }
}

このプログラムを実際に実行すると変数xの値に一致する部分以降の処理が実行されてしまいます。これを抑止するのがbreak文の役割です。次のプログラムがbreak文を追加したものです。

import java.io.*;
import java.text.*;

class Switch_ex {
  public static void main(String args[]){
    int x;

    BufferedReader BR = new BufferedReader(new InputStreamReader(System.in));
    DecimalFormat DF = new DecimalFormat();
    
    System.out.print("数値を入力してください : ");
    
    try {
      String s = BR.readLine();
      Number Num = DF.parse(s);
      x = Num.intValue();
    }
    catch (IOException e) { x = 0; }
    catch (ParseException e) { x = 0; }
    
    switch (x) {
      case 0 : System.out.println("入力された数値は0です。もしかすると例外かも");
               break;
      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("入力された数は0から3以外です");
    }
  }
}

ちなみに、この例のswitch文は次のif文と等価です。

if (x == 0) System.out.pintln("入力された数値は0です。もしかすると例外かも");
if (x == 1) System.out.pintln("入力された数値は1です。");
if (x == 2) System.out.pintln("入力された数値は2です。");
if (x == 3) System.out.pintln("入力された数値は3です。");
if (x < 0 || x > 3) System.out.pintln("入力された数値は0から3以外です。");