libro
www.tuyano.com
Android開発ビギナーのためのJava超入門

構文を覚えよう! (4/6)

作成:2011-01-06 09:25
更新:2012-04-30 13:42

■たくさんの分岐は「switch」文で!

さて、構文の話に戻りましょう。ifは、二者択一で分岐をするものでした。これさえあれば、大抵の分岐はできますが、しかし基本的に二者択一の分岐しかできないので、それ以上の分岐は大変です。

例えば「数字が1〜10のいくつかによって全部違う処理をする」なんてとき、どうすればいいでしょうか。もちろん、ifでもできますよ。「まず変数が1かどうか調べ、そうでなければ2かどうか調べ、そうでなければ3かどうか……」なんて具合に順番にやっていけば、ちゃんと作れます。けれど、これってかなり面倒くさいですよね。

そこで、「数字を使ってたくさんの分岐をするような場合は、専門の構文を用意しよう」ということで作られたのが「switch」という構文です。これは以下のように記述します。
switch( チェックする値 ){
case 値1:
    ……値1だったときの処理……
    break;
case 値2:
    ……値2だったときの処理……
    break;

……必要なだけcaseを用意する……

default:
    ……どれでもない場合の処理……
}
けっこう複雑そうですが、構文の働き自体は割とシンプルですswitchの後の()にチェックする変数とか式、フィールド・メソッドといったものを用意し、その値がいくつかによって、その後にあるcaseにジャンプする、と考えると仕組みがよくわかるでしょう。ジャンプするcaseが見つからない(つまり、指定した値が用意されていない)場合は、defaultというところにジャンプします。このdefaultはオプションで、書かなくてもかまいません。(その場合は、何もしないで次に進みます)

注意しておきたいのは、「構文は、指定した値のcaseにジャンプするだけで、そこから抜ける働きはない」という点です。つまり、ジャンプしてそこにある処理を実行する、まではいいんですが、「終わったら構文を抜けて次に進む」という機能はないんです。

そこで、必要な処理が終わったら、最後に「break」というのを実行します。これは、「現在の構文から抜ける」という働きをするキーワードです。これで「ここまで来たら抜けるよ」ということをプログラマが自分で書いてやらないといけません。

「面倒くさいな」と思うでしょうが、これは逆にいえば「抜けなくてもいい」ということになります。例えば、下にあげたサンプルを見てください。最初の変数numに1〜10の適当な整数を入力して実行すると、その数までの合計を計算して表示します。

ここでは、各caseの処理の最後にbreakを書いていません。だから、例えばcase 10にジャンプすると、total = total + 10;を実行し、その下のtotal = total + 9;を実行し、そのまた下のtotal = total + 8;を実行し……と全部実行していき、結果的に全部の合計が計算できる、というわけです。

これの動作を確かめたら、各caseの最後にbreakを追加して、今度はどうなるか調べてみるとよいでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

public class Sample {

	public static void main(String[] args) {
		int num = 5; // 1~10の範囲で適当に
		int total = 0;
		switch(num){
		case 10:
			total = total + 10;
		case 9:
			total = total + 9;
		case 8:
			total = total + 8;
		case 7:
			total = total + 7;
		case 6:
			total = total + 6;
		case 5:
			total = total + 5;
		case 4:
			total = total + 4;
		case 3:
			total = total + 3;
		case 2:
			total = total + 2;
		case 1:
			total = total + 1;
		}
		System.out.println("*" + num + "までの合計:" + total);
	}

}

※関連コンテンツ

「Android開発ビギナーのためのJava超入門」に戻る