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