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に該当がなかった場合に以降のステートメントを実行します



前のページへ戻る次のページへ