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 ド そんな曜日はありません! ともだちよ、これが私の一週間の仕事です。