条件分岐 (switch文)


[条件分岐 関連記事]

今回は条件分岐処理の1つである「switch」についてみていきます。

基本構文

switch (条件式) {
    case 値1:
        処理1
    case 値2:
        処理2
    default:
        処理3
}

この条件文は次のような手順で実行される。 ※wikipedia引用

  1. 条件の値を評価する。
  2. もし、条件式の値が「case」で指定された値であるなら、その文を実行する。
  3. 条件式の値が「case」で指定されていなければ、「default」で指定されている
    文を実行する。
  4. もし「default」が記述されていなければ、何も実行せずにswitch文を抜ける。

注意しなければならないことは、条件式に該当する「case」の処理以降の全ての処理が実行される点です。つまり条件式が「値1」に該当した場合、「処理1、処理2、処理3」が実行されます。次の「case」や「default」の前で抜けないことに気をつけてください。

サンプル

public class sample01 {
    public static void main(String[] args) {
        int variable;
        variable = 3;
        switch (variable)
        {
            case 1:
                System.out.print("通過1:");
            case 3:
                System.out.print("通過2:");
            case 5:
                System.out.print("通過3:");
            case 7:
                System.out.print("通過4:");
            default:
                System.out.print("通過5:");
         }
    }
}
通過2:通過3:通過4:通過5:

4行目でint型の変数variableに3を代入しました。
5行目のswitchの条件式が(variable) なので変数variableの値によって分岐します。
該当する値は3なので9行目の「case 3:」で処理に入ります。
一回処理に入るとそれ以降の全ての処理が実行されます。
結果をみるとcase3の「 通過2:」 を表示する処理だけでなくそれ以降も実行されているのがわかります。

public class sample01 {
    public static void main(String[] args) {
        int variable;
        variable = 2;
        switch (variable)
        {
            case 1:
                System.out.print("通過1:");
            case 3:
                System.out.print("通過2:");
            case 5:
                System.out.print("通過3:");
            case 7:
                System.out.print("通過4:");
            default:
                System.out.print("通過5:");
         }
    }
}
通過5:

今度は4行目でint型の変数variableに2を代入しました。
変数variableが2であるcaseの指定はありません。
このように条件式がどのcaseにも該当しない場合は「default」の処理が実行されます。
「default」は省略することもできますが、省略した場合switch文の処理は何もありません。

break

public class sample01 {
    public static void main(String[] args) {
        int variable;
        variable = 3;
        switch (variable)
        {
            case 1:
                System.out.print("通過1:");
            case 3:
                System.out.print("通過2:");
            case 5:
                System.out.print("通過3:");
                break;
            case 7:
                System.out.print("通過4:");
            default:
                System.out.print("通過5:");
         }
    }
}
通過2:通過3:

一回処理に入るとそれ以降の全ての処理が実行されますが、途中で処理を終わらせたい場合があります。
break文」を記述することにより、そこでswitch文から抜けることができます。
サンプルでは「case 3:」に該当するのでそこから処理に入ります。
「通過2:」「通過3:」を表示する処理の後、13行目に「break文」があります。
そこでswitch文から抜ける為、それ以降の処理は実行されません。

条件式の制約

public class sample01 {
    public static void main(String[] args) {
        double variable;
        variable = 1.5;
        switch (variable)
        {
            case 1.5:
                System.out.print("通過1:");
         }
    }
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
型 double の値でスイッチすることはできません。変換可能な int 値または enum 定数のみが許可されています

switch文の条件式には制約があって整数型の一部か文字型しか使えません。
つまり使える型は

byte , short , int ,  char

になります。条件式なので結果が上記の型になってればOKです。
たとえば switch( variable / 10 ) などの指定もできます。


[条件分岐 関連記事]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です