分岐命令--- switch 命令


■ switch 命令の書き方

ひとつの値に複数個条件がある場合、else if命令を重ねて記述する必要があります。 これは結構複雑になります。そこでこのような場合、switch命令というもうひとつの 分岐命令が便利です。

例えば、「aの値が1の場合は、Aの処理をして、2の場合はBの処理をする、3の場合はCの処理をする」というのをif命令とelse if命令を使って記述すると、次のようになります。

   if (aの値が1条件){
             Aの処理
          }
   else  if (aの値が2条件){
               Bの処理
             } 
            else  if (aの値が3条件){
                   Cの処理
                  }

これをswitch命令を使用して記述すると、次のように書けます。

   switch( a ){
             case 1: Aの処理
                          break;
             case 2: Bの処理
                          break;
             case 3: Cの処理
                          break;
    } 
if命令よりは、視覚的に読みやすい書き方です。 したがって、同じ値に対して条件が多数ある場合は、このswitch命令をうまく使うことによって読みやすく間違いにくいプログラムを書くことができます。 ただ、注意することは、例えばaが1であったので『Aの処理』をしたとすると、その後プログラムは、aが2ではないかという判断をします。それをしたくない場合は、上記のようにbreak命令を書いておき、switch命令の終わりに行くようにする必要があります。

■ switch命令を使ったプログラム例

次のプログラムは、和暦を西暦に直すプログラムの例です。 和暦を次のように指定することとします。
  1. 明治:1
  2. 大正:2
  3. 昭和:3
  4. 平成:4

したがって、「昭和22年」は「3 22」と2つの数値でデータを与えることとします。
また処理は、次のようになります。

  1. 明治であれば、和暦+1867
  2. 大正であれば、和暦+1911
  3. 昭和であれば、和暦+1925
  4. 平成であれば、和暦+1988
  5. 上記以外であれば、『?xx年は、西暦9999年です』と表示する。
データは、javaプログラム実行命令の中で指定することとします。

// 和暦を西暦に変換する

public class Switch{
    public static void main(String[] args) {
	String  nen;
	int nengo, wanen, seireki;
                                      
	nengo=Integer.parseInt(args[0]);
                   wanen=Integer.parseInt(args[1]);

                   switch(nengo){
                         case 1:
                                     nen="明治";
                                     seireki=wanen+1867;
                                     break;
                         case 2:
                                     nen="大正";
                                     seireki=wanen+1911;
                                      break;
                          case 3:
                                      nen="昭和";
                                      seireki=wanen+1925;
                                      break;
                          case 4:
                                      nen="平成";
                                      seireki=wanen+1988;
                                      break;
                           default:
                                      nen=" ? ";
                                      seireki=9999;
	     }
                       System.out.println(nen+wanen+"年は、");
                       System.out.println("西暦"+seireki+"年です。");
    }
}

上記プログラムの実行例を以下に示します。
[egi@taro prog]$ java Switch 3 22
昭和22年は、
西暦1947年です。
[egi@taro prog]$ java Switch 1 14
明治14年は、
西暦1881年です。
[egi@taro prog]$ java Switch 9 22
 ? 22年は、
西暦9999年です。
[egi@taro prog]$ 
上記のように、実行時にクラス名に引き続いて2つの数値を入力すると、プログラム内では、arge[0], arge[1] の配列に値が格納されます。これもプログラムにデータを与えるひとつの方法です。 但し、上記のプログラムでは、数値以外の値が入力されたときの例外処理をしていません。本来は、その処理をすべきです。

プログラミング / 江木