構文を覚えよう! (4/6)
作成:2011-01-06 09:25
更新:2012-04-30 13:42
更新:2012-04-30 13:42
■たくさんの分岐は「switch」文で!
さて、構文の話に戻りましょう。ifは、二者択一で分岐をするものでした。これさえあれば、大抵の分岐はできますが、しかし基本的に二者択一の分岐しかできないので、それ以上の分岐は大変です。
例えば「数字が1〜10のいくつかによって全部違う処理をする」なんてとき、どうすればいいでしょうか。もちろん、ifでもできますよ。「まず変数が1かどうか調べ、そうでなければ2かどうか調べ、そうでなければ3かどうか……」なんて具合に順番にやっていけば、ちゃんと作れます。けれど、これってかなり面倒くさいですよね。
そこで、「数字を使ってたくさんの分岐をするような場合は、専門の構文を用意しよう」ということで作られたのが「switch」という構文です。これは以下のように記述します。
注意しておきたいのは、「構文は、指定した値のcaseにジャンプするだけで、そこから抜ける働きはない」という点です。つまり、ジャンプしてそこにある処理を実行する、まではいいんですが、「終わったら構文を抜けて次に進む」という機能はないんです。
そこで、必要な処理が終わったら、最後に「break」というのを実行します。これは、「現在の構文から抜ける」という働きをするキーワードです。これで「ここまで来たら抜けるよ」ということをプログラマが自分で書いてやらないといけません。
「面倒くさいな」と思うでしょうが、これは逆にいえば「抜けなくてもいい」ということになります。例えば、下にあげたサンプルを見てください。最初の変数numに1〜10の適当な整数を入力して実行すると、その数までの合計を計算して表示します。
ここでは、各caseの処理の最後にbreakを書いていません。だから、例えばcase 10にジャンプすると、total = total + 10;を実行し、その下のtotal = total + 9;を実行し、そのまた下のtotal = total + 8;を実行し……と全部実行していき、結果的に全部の合計が計算できる、というわけです。
これの動作を確かめたら、各caseの最後にbreakを追加して、今度はどうなるか調べてみるとよいでしょう。
例えば「数字が1〜10のいくつかによって全部違う処理をする」なんてとき、どうすればいいでしょうか。もちろん、ifでもできますよ。「まず変数が1かどうか調べ、そうでなければ2かどうか調べ、そうでなければ3かどうか……」なんて具合に順番にやっていけば、ちゃんと作れます。けれど、これってかなり面倒くさいですよね。
そこで、「数字を使ってたくさんの分岐をするような場合は、専門の構文を用意しよう」ということで作られたのが「switch」という構文です。これは以下のように記述します。
switch( チェックする値 ){けっこう複雑そうですが、構文の働き自体は割とシンプルですswitchの後の()にチェックする変数とか式、フィールド・メソッドといったものを用意し、その値がいくつかによって、その後にあるcaseにジャンプする、と考えると仕組みがよくわかるでしょう。ジャンプするcaseが見つからない(つまり、指定した値が用意されていない)場合は、defaultというところにジャンプします。このdefaultはオプションで、書かなくてもかまいません。(その場合は、何もしないで次に進みます)
case 値1:
……値1だったときの処理……
break;
case 値2:
……値2だったときの処理……
break;
……必要なだけcaseを用意する……
default:
……どれでもない場合の処理……
}
注意しておきたいのは、「構文は、指定した値のcaseにジャンプするだけで、そこから抜ける働きはない」という点です。つまり、ジャンプしてそこにある処理を実行する、まではいいんですが、「終わったら構文を抜けて次に進む」という機能はないんです。
そこで、必要な処理が終わったら、最後に「break」というのを実行します。これは、「現在の構文から抜ける」という働きをするキーワードです。これで「ここまで来たら抜けるよ」ということをプログラマが自分で書いてやらないといけません。
「面倒くさいな」と思うでしょうが、これは逆にいえば「抜けなくてもいい」ということになります。例えば、下にあげたサンプルを見てください。最初の変数numに1〜10の適当な整数を入力して実行すると、その数までの合計を計算して表示します。
ここでは、各caseの処理の最後にbreakを書いていません。だから、例えばcase 10にジャンプすると、total = total + 10;を実行し、その下のtotal = total + 9;を実行し、そのまた下のtotal = total + 8;を実行し……と全部実行していき、結果的に全部の合計が計算できる、というわけです。
これの動作を確かめたら、各caseの最後にbreakを追加して、今度はどうなるか調べてみるとよいでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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); } }
※関連コンテンツ