hsmwhsmw

初心者入門switch文 - 条件分岐 - Java入門

ある変数の値を複数の値と比較し、値に応じた処理を行うような場合を考えてみます。if文を使って記述すると次のようになります。

int num = 3;

if (num == 1){
  System.out.println("非常に不満");
}else if (num == 2){
  System.out.println("少し不満");
}else if (num == 3){
  System.out.println("どちらとも言えない");
}else if (num == 4){
  System.out.println("少し満足");
}else if (num == 5){
  System.out.println("大変満足");
}

このようにif文を使っても記述できますが、対象となる値毎に処理を分けるにはswitch文を使って記述することもできます。

switch文の利用

switch文は対象の式を評価した結果の値に応じ、値に一致するラベルの位置へ処理を移すために使います。条件分岐とは厳密には少し違いますが同じような使い方ができる文ですす。switch文の書式は次のようになっています。

switch (式){
  case 定数1:
    実行する文1;
    実行する文2;
    ...
    break;
  case 定数2:
    実行する文1;
    実行する文2;
    ...
    break;
}

switch文ではまず式を評価します。式には単に整数の値が代入された変数などを単に記述してもいいですし、計算式などを記述することも可能です。ただいずれの場合であっても式の評価した結果が整数でなければなりません。浮動小数点数や文字列などは記述できません。また整数であってもlong型の値は使用できません。

式には例えば次のように記述します。

int num = 3;

switch (num){       // 変数の値が式を評価した値
  ...
}

switch (num % 2){   // 演算結果が式を評価した値
  ...
}

次にswitch文の「{」から「}」のブロック内に実行したい処理を羅列していきます。

int num = 3;

switch (num){
  System.out.println("非常に不満");
  System.out.println("少し不満");
  System.out.println("どちらとも言えない");
  System.out.println("少し満足");
  System.out.println("大変満足");
}

switch文は式を評価した値に一致するラベルへ処理を移動させるために使われます。そこでどの値だったらどの処理を行うのかを指定するためにブロック内にラベルを記述していきます。ラベルは次のような形式となっています。

case 定数:

ブロック内にラベルを記述すると、式を評価した値と一致するラベルのところへ処理を移すことができます。例えば5つのラベルを記述すると次のようになります。

int num = 3;

switch (num){
  case 1:
    System.out.println("非常に不満");
  case 2:
    System.out.println("少し不満");
  case 3:
    System.out.println("どちらとも言えない");
  case 4:
    System.out.println("少し満足");
  case 5:
    System.out.println("大変満足");
}

ラベルに書いた値が「1」「2」「3」「4」「5」ですので、式の値が1から5の場合に対応するラベルの位置へ処理が移ります。今回の場合、変数「num」の値が3ですので「case 3:」のラベルの位置に処理が移ります。そしてその後に記述された「System.out.println("どちらとも言えない");」が実行されます。

注意して頂きたいのはあくまでラベルが書かれた位置に処理が移るだけということです。ラベルの位置へ移動した後はswitch文の最後までそれ以降の文を順に実行していきます。よって「System.out.println("どちらとも言えない");」が実行された後は「System.out.println("少し満足");」と「System.out.println("大変満足");」が実行されます。

もしもラベルの位置へ移動した後に、次のラベルの前まで来たらswitch文を終了させたい場合にはbreak文を使います。break文についてはまた別のページで詳しく解説しますが、switch文の中でbreak文が実行されるとswitch文を終了します。具体的には次のように記述します。

int num = 3;

switch (num){
  case 1:
    System.out.println("非常に不満");
    break;
  case 2:
    System.out.println("少し不満");
    break;
  case 3:
    System.out.println("どちらとも言えない");
    break;
  case 4:
    System.out.println("少し満足");
    break;
  case 5:
    System.out.println("大変満足");
    break;
}

上記のようにbreak文を記述するとbreak文を実行した時点でswitch文は終了します。よって上記の場合では「System.out.println("どちらとも言えない");」が実行された後に「break;」が実行されてswitch文は終了します。

以上がswitch文の大まかな使い方です。if文を使えば同じようなことが記述できる場合が多いのですが一つの変数の値に応じて処理を分けたい場合にはswitch文の方が見やすく記述できる場合があります。

default句

式の値と一致するラベルが無かった場合は何も実行せずにswitch文を終了しますが、一致するラベルが無かった場合に何か実行させたい処理がある場合にはdefault句を使います。書式は次の通りです。

switch (式){
  case 定数1:
    実行する文;
    ...
    break;
  case 定数2:
    実行する文;
    ...
    break;
  default:
    実行する文1;
    実行する文2;
    ...
}

上記の場合、式を評価した結果の値が、定数1にも定数2にも一致しなかった場合には「default:」の位置に処理が移ります。そしてその後に書かれた文が順に実行されていきます。

例えば次のように記述します。

int num = 3;

switch (num){
  case 4:
    System.out.println("少し満足");
    break;
  case 5:
    System.out.println("大変満足");
    break;
  default:
    System.out.println("満足していない");
}

上記の場合、変数「num」の値が4または5以外の場合には全て「System.out.println("満足していない");」の文を実行します。

サンプル

では簡単な例で試しておきます。

JSample4_1.java

class JSample4_1{
  public static void main(String args[]){

    for (int num = 2; num < 6 ; num++){
      System.out.println("num = " + num);

      switch (num){
        case 4:
          System.out.println("少し満足");
          break;
        case 5:
          System.out.println("大変満足");
          break;
        default:
          System.out.println("満足していない");
      }
    }
  }
}

コンパイル後に実行すると次のように表示されます。

p4-1