switch文制御
複数選択
if文では二者択一的な制御であったのに対して
switchは複数選択ステートメントと呼ばれます
つまり、一つの対象に対して複数の分岐が可能なのです
対象に対して、比較する定数と実行するステートメントを指定します
一致するものがなかった場合はdefaultを実行するという仕組みになっています
switch (expr) {
case constant1:
statement;
break;
case constantn...
statement;
break;
.
.
default:
statement;
break;
}
これは expr の値に対して constantに定数を指定します
switchは等しければ実行しますが比較はできません
constantに指定する値は常に等しいか否か評価されます
もう一つ、注意ですが同一の値を持つcaseを二つ以上作ることはできません
また、caseがもつ値に等しければ、そこからswitchの最後まで実行されてしまいます
そのため、一つのcaseの節には基本的にbreakをつけます
caseで指定するステートメントは、連続しても括弧をつける必要はありません
class test {
public static void main(String args[]) {
int var = 0;
switch (var) {
case 0:
System.out.println("0番が実行されました");
break;
case 1:
System.out.println("1番が実行されました");
break;
default:
System.out.println("該当がありませんでした");
}
System.out.println("プログラムを終了します");
}
}
これがswitchの基本的な構文です
switchには浮動小数点は指定できません
変数varの値をかえて実験してみてください。breakを外して実行しても面白い結果がえられます
switchステートメントもネストすることが可能です
class test {
public static void main(String args[]) {
int var = 0;
switch (var) {
case 0:
System.out.println("0番が実行されました");
switch (var + 3) {
case 3:
System.out.println("ネストされたswitchが実行されました");
break;
}
break;
case 1:
System.out.println("1番が実行されました");
break;
default:
System.out.println("該当がありませんでした");
}
System.out.println("プログラムを終了します");
}
}
switchのネストを見てわかるとおり、defaultは任意です
exprに該当するケースがなく、かつdefaultがない場合は何も実行せずに終わります
また、caseに関連付けるステートメントも任意です
省略することによって、複数のケースに同一の結果をもたらすこともできます
class test {
public static void main(String args[]) {
char var = 'A';
switch (var) {
case 'A':
case 'a':
System.out.println("該当しました");
break;
default:
System.out.println("該当なし");
}
System.out.println("プログラムを終了します");
}
}
このプログラムの場合は、varの値が'A'でも'a'でも 「該当しました」 が出力されます
switch (expr) ...
次のような構文を含めることが可能です
switch (expr) {
case constant:
statement...;
default:
statement...;
}
exprで評価された値が case と一致すれば、そのcase移行のステートメントが全て実行されます
expr - 必ず指定します。評価する式を指定します
case - 指定した定数に一致すれば以降のステートメントを実行します。一つのswitchの中に任意の数だけ指定できます
constant - char , byte , short , int いずれかのデータ型の定数を指定します
statement - caseやdefaultに関連付けるステートメントを指定します
default - 全てのcaseに該当がなかった場合に以降のステートメントを実行します