Developer

【はじめてのJava】switch文【基本構文編(条件分岐)】
2021.01.25
Lv1

【はじめてのJava】switch文【基本構文編(条件分岐)】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


基本構文編

基本構文編(条件分岐)では、ある条件によってプログラムの処理を分岐させることが出来る条件分岐について扱っていきます。

今回は、switch文について扱っていきます。


目次


switch文


switch文

switch文は、多分岐処理を実行する場合に使用します。以前紹介したif文と同様に、条件によってプログラムの処理を分岐させることが出来るようになります。
if文とは違い、条件判断は整数型の値で行います。
swicth文の基本的な書式は以下のようになります。

switch(整数式){
case 定数式1:
	処理1;
case 定数式2:
	処理2;
default:
	処理3;
}

switch文では、switch(整数式)のように記述することで、条件分岐の基準となる値を定義します。整数式の部分には「char/byte/short/int/enum/String」の6種類のデータ型が使用できます。
処理の流れをフローチャートにしてみると、以下のようになります。


case文

switch文では、整数式が返す値とcase文で指定した定数式を比較し、一致した場合はそのcase以降に既述した処理を実行します。case文の処理は複数行記述することが出来ます。
また、case文を複数記述した場合、整数式と定数の比較はcase文を記述した順に比較が行われていきます。
この際、整数式とcase文の定数が一致した場合、 一致したcase文以降に記述されている他のcase文やdefault文の中の処理もすべて実行されてしまう ので注意が必要です。

例えば例文の中で定数式1が整数式と一致した場合、実行される処理は、処理1と処理2、処理3が実行されます。
値が一致するcase文の中の処理のみ実行するためには、break文を使用して動作を管理します。


break文

break文を記述することで、switch文の処理を中断して抜け出すことが出来ます。break文の記述の仕方は以下のようになります。

switch(整数式){
case 定数式1:
	処理1;
	break;
case 定数式2:
	処理2;
	break;
default:
	処理3;
}

上記のように記述することで、switch文は定数が一致したcase文の処理のみを実行するようになります。
上記の処理をフローチャートにすると以下のようになります。


default文

default文に記述された処理は、記述した全てのcaseと整数式が一致しなかった場合に実行されます。
default文はswitch文のどの位置に記述しても問題ありません。また、default文を省略することも可能です。


サンプルコード

実際にサンプルコードを見てswtich文の動作を確認してみましょう。

package java_silver;

public class Sample {
	public static void main(String[] args) {
		String name = "太郎";
		int num =1;

		switch(num) {
		case 1:
			System.out.println(name + "さんは総務部所属です。");
			break;//処理を中断してswitch文から抜けだす。
		case 2:
			System.out.println(name + "さんは人事部所属です。");
			break;//処理を中断してswitch文から抜けだす。
		case 3:
			System.out.println(name + "さんは営業部所属です。");
			break;//処理を中断してswitch文から抜けだす。
		default:
			System.out.println(name + "さんの所属は未登録です。");
		}
	}
}

実行結果

サンプルコードの実行結果は上の図のようになります。
変数numについて、switch文で条件分岐をしています。変数numには1が代入されており、「case 1:」で指定された定数が一致するため「case 1:」の中の処理から実行されます。
文字列を1行出力した後、break文が記述されているためswitch文から抜け出して処理が終了します。

それでは、サンプルコードからbreak文を削除して処理を実行してみましょう。switch文内のbreakをすべて削除して処理を実行すると、

という実行結果となります。

これは、「case 1:」内の処理が実行された後、処理がbreakによって中断されなくなるためです。「case 1:」内の処理が実行された後、switch文はその続きに記述された処理をすべて実行します。
結果として、「case 2:」や「case 3:」、「default:」内の処理が実行されるようになり、実行結果には4行の文字列が出力されてしまいます。


ポイント

switch文は整数式と一致したcase文以降の処理をすべて実行しようとする。
整数式と一致したcase文の中の処理だけ実行したい場合は、break文を記述して処理を中断してswitch文から抜け出すように記述する必要がある。


はじめてのJavaシリーズの目次はこちら
基本構文編の記事一覧はこちら


java 11 の練習問題一覧はこちら