switch

last-modified: Dec./23rd/2001

if 文では、条件式に対して true/false に応じて制御を分岐しました。 switch 文では、式に対してその値に応じて制御を分岐できます。後で紹介する、ラベルの利用例です。

基本構文

switch (式) {
  case 定数1:
    実行内容A
    break;
  case 定数2:
    実行内容B
    break;
  case 定数3:
    実行内容C
    break;
  default:
    実行内容D
    break;
}

の値が、定数1ならば実行内容Aを実行し、定数2ならば実行内容Bを実行します。上で挙げた例では、定数1から定数3までの値に一致しない場合は、実行内容Dが実行されます。

式の値を受けている行が、コロン ":" で終わっていることに注意してください。これがラベルの目印です。 switch 文は、式の値に一致するラベルをブロック内に探して制御を移します。

break; にも注目してください。これは当該ブロックからの脱出を意味しています。ブロックとは、中カッコ "{" と "}" の間のことです。今の場合は、 switch{} ブロックからの脱出を意味しています。

応用例は思い浮かぶでしょうか?

サンプル

class TestSwitch {
  public static void main(String[] args) {
    int i=Integer.parseInt(args[0]);
    switch (Integer.parseInt(args[0])%4) {
      case 0:
        System.out.print(args[0]+": 場合1");
        break;
      case 3:
        System.out.print(args[0]+": 場合2");
        break;
      default:
        System.out.print(args[0]+": 場合3");
        break;
    }
  }
}

コマンドラインから入力した数字が、4で割って余りが0か3かそれ以外かで場合分けしています。

全く実用性が無いところがイタイところですが、まあ良いでしょう。

C:\Java>javac TestSwitch.java
C:\Java>java TestSwitch 0
0: 場合1
C:\Java>java TestSwitch 1
1: 場合3
C:\Java>java TestSwitch 2
2: 場合3
C:\Java>java TestSwitch 3
3: 場合2
C:\Java>java TestSwitch 100
100: 場合1

次のサンプルは、コマンドラインから曜日を入力して、それに応じたメッセージを出力します。

Week.java:

class Week {
  public static void main(String[] args) {
    switch (args[0].charAt(0)) {
      case '日':
        System.out.println("市場へ出かけ、糸と麻を買ってきた");
        break;
      case '月':
        System.out.println("お風呂を炊いて");
        break;
      case '火':
        System.out.println("お風呂に入り");
        break;
      case '水':
        System.out.println("友達が来て");
        break;
      case '木':
        System.out.println("送っていった");
        break;
      case '金':
        System.out.println("糸巻きもせず");
        break;
      case '土':
        System.out.println("おしゃべりばかり");
        break;
      default:
        System.out.println("そんな曜日はありません!");
        break;
    }
    System.out.print("ともだちよ、これが私の一週間の仕事です。");
  }
}

charAt() メソッドは、 String クラスで定義されているメソッドで、オブジェクトである文字列の、指定された順番の文字を char 型データで返します。 case 文のラベルには整数型のデータしか指定できないので、必要となった手順です。

charAt() メソッドの引数は0から始まります。

C:\Java>javac TestSwitch2.java
C:\Java>java TestSwitch2 月
お風呂を炊いて
ともだちよ、これが私の一週間の仕事です。
C:\Java>java TestSwitch2 日曜日
市場へ出かけ、糸と麻を買ってきた
ともだちよ、これが私の一週間の仕事です。
C:\Java>java TestSwitch2 火
お風呂に入り
ともだちよ、これが私の一週間の仕事です。
C:\Java>java TestSwitch2 ド
そんな曜日はありません!
ともだちよ、これが私の一週間の仕事です。


Copyright © 2001 SUGAI, Manabu. All Rights Reserved.