2016.08.04

switch文

はじめに

switch文は、の値によって処理を分岐するものです。

caseで指定する定数の値と一致した場合にcase~とbreakに囲まれた処理を実行します。caseで指定した定数と一致しなかった場合はdefault~とbreakに囲まれた処理を実行します。

書き方

その一般的な書き方は、以下のとおりです。

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

定数1~nのいずれかと一致したときに、その定数に応じた処理文を実行します。case 定数: ~ break;の間の処理文が実行されます。default:は、どの定数とも一致しなかったときの分岐処理です。これは省略することができます。

式には、byte型char型short型int型/enum型 (JDK 1.5以降)/String型 (JDK 1.7以降)のいずれかの型を使うことができます。(実数型は使えません)

定数には、変数および計算式は使えません。

上記のswitch-case文をif文で書くと以下のようになります。else文を使うのネストが深くなります。変数定数を演算子'=='で比較し、同じであれば処理を実行し、違えば変数と別の定数との比較を行なっていきます。

	if ( 変数==定数1 ) {
	     処理文1
	}
	else {
	    if ( 変数==定数2 ) {
	         処理文2
	    }
	    else {
	        if ( 変数==定数3 ) {
	             処理文3
	        }
	        else {
	
	            :
	
	        }
	}

else文を使わない場合はネストは深くなりませんが、処理の中で変数の値を変更した場合に正しい結果が得られないことがあります。

下の例で、変数定数2が等しい場合、処理文2が実行され、変数定数3を代入します。その結果、次のif文変数定数3の比較を行なっているので処理文3も実行されてしまいます。これが狙い通りであれば問題ないですが、違うのであればelseを使う必要があります。

	if ( 変数==定数1 ) {
	     処理文1
	}
	
	if ( 変数==定数2 ) {
	     class="sourcecoment">// 処理文2
	     変数==定数3
	}
	
	if ( 変数==定数3 ) {
	     処理文3
	}
	
	        :
	
	
	if ( 変数==定数n ) {
	     処理文n
	}

それでは次に、違う定数で同じ処理を実行するときのswitch文の書き方を説明します。以下がその例です。

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

case 定数を並べることで複数の定数に対して、同じ処理を実行できるようになります。上の例の場合、式が定数1または定数2の場合に処理文1を実行、式が定数3または定数4または定数5の場合に処理文2を実行します。、

ここからは、switch文を使用したサンプルのJavaソースコードで使い方を解説していきます。以下がそのソースコードです。

Javaソースコード その1

Switch1.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
public class Switch1 {
	public static void main( String[] args ) {
		int a;

		a = 2;

		switch ( a ) {
			case 1:
				System.out.println(  "aの値は1です。" );
				break;
			case 2:
				System.out.println(  "aの値は2です。" );
				break;
			case 3:
				System.out.println(  "aの値は3です。" );
				break;
			default:
				System.out.println(  "aの値は1、2、3ではありません。" );
				break;
		}
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Switch1.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Switch1.java

実行

C:\talavax\javasample>java Switch1

出力結果

aの値は2です。
005
		a = 2;

整数型の変数aに2を代入しています。

007
008
009
010
011
012
013
014
015
016
017
018
019
020
		switch ( a ) {
			case 1:
				System.out.println(  "aの値は1です。" );
				break;
			case 2:
				System.out.println(  "aの値は2です。" );
				break;
			case 3:
				System.out.println(  "aの値は3です。" );
				break;
			default:
				System.out.println(  "aの値は1、2、3ではありません。" );
				break;
		}

a=2なのでcase 2:のSystem.out.println( "aの値は2です。" );が実行されます。

Javaソースコード その2

次のサンプルは、case文を並べた例です。

Switch2.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
public class Switch2 {
	public static void main( String[] args ) {
		int a;

		a = 4;

		switch ( a ) {
			case 1:
			case 2:
				System.out.println(  "aの値は1または2です。" );
				break;
			case 3:
			case 4:
			case 6:
				System.out.println(  "aの値は3または4または6です。" );
				break;

			default:
				System.out.println(  "aの値は1、2、3、4、6以外です。" );
				break;
		}
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Switch2.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Switch2.java

実行

C:\talavax\javasample>java Switch2

出力結果

aの値は3または4または6です。
005
		a = 4;

整数型の変数aに4を代入しています。

007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
		switch ( a ) {
			case 1:
			case 2:
				System.out.println(  "aの値は1または2です。" );
				break;
			case 3:
			case 4:
			case 6:
				System.out.println(  "aの値は3または4または6です。" );
				break;

			default:
				System.out.println(  "aの値は1、2、3、4、6以外です。" );
				break;
		}

a=4なのでcase 4:のときに実行される処理、System.out.println( "aの値は3または4または6です。" );が実行されます。

Javaソースコード その3

次のサンプルは、caseのbreak文を省略したした例です。break文を省略すると条件に合ったcase文から処理が実行されます。処理を進めていきbreak文が見つかるか、switch文の最後まで処理が実行されれば処理を終了します。このサンプルは、これを利用して1~nの合計値を計算するものです。

Switch3.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
public class Switch3 {
	public static void main( String[] args ) {
		int n, total;

		// 1~nの合計を計算
		n = 10;

		// totalの処理値を0
		total = 0;
		switch ( n ) {
			case 15:
				total += 15;
			case 14:
				total += 14;
			case 13:
				total += 13;
			case 12:
				total += 12;
			case 11:
				total += 11;
			case 10:
				total += 10;
			case 9:
				total += 9;
			case 8:
				total += 8;
			case 7:
				total += 7;
			case 6:
				total += 6;
			case 5:
				total += 5;
			case 4:
				total += 4;
			case 3:
				total += 3;
			case 2:
				total += 2;
			case 1:
				total += 1;
		}
		// 結果を出力
		System.out.println(  "1~" + n + "の合計 : " + total );
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Switch3.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Switch3.java

実行

C:\talavax\javasample>java Switch3

出力結果

1~10の合計 : 55
005
006
		// 1~nの合計を計算
		n = 10;

int型変数nに10を代入しています。1から10の合計値を計算させます。

008
009
		// totalの処理値を0
		total = 0;

合計値を格納するint型変数totalの初期値に0を代入しています。

010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
		switch ( n ) {
			case 15:
				total += 15;
			case 14:
				total += 14;
			case 13:
				total += 13;
			case 12:
				total += 12;
			case 11:
				total += 11;
			case 10:
				total += 10;
			case 9:
				total += 9;
			case 8:
				total += 8;
			case 7:
				total += 7;
			case 6:
				total += 6;
			case 5:
				total += 5;
			case 4:
				total += 4;
			case 3:
				total += 3;
			case 2:
				total += 2;
			case 1:
				total += 1;
		}

合計値を計算するswitch文です。case文の定数は15から1なのでn=1~15の範囲で合計値を計算することができます。case文の定数に対応した箇所から処理が開始されswitch文の最後まで処理を実行します。n=10の場合,21行目の"case 10:"から下の処理を実行します。

042
043
		// 結果を出力
		System.out.println(  "1~" + n + "の合計 : " + total );

実際にプログラムをこのような合計値printlnメソッドコンソール出力しています。

以上です。

関連コンテンツ

式の値によって処理を分岐する方法を詳しく解説しています。

2016.08.04

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

自然数と整数って何が違う?

2020.03.23

繰り返し処理(ループ)から強制的に抜けかたについて解説しています。

2017.07.14

複数の数値の合計値と平均値を計算するプログラムをJavaのソースコードを使って解説しています。

2020.03.23

for文で変数名iがよく使われる理由について説明しています。興味のある方は是非。

2022.08.29

簡単な「じゃんけん」ゲームの作り方をソースコードを使って詳しく説明しています。

2023.05.22

連続で「じゃんけん」ができるプログラムの作り方をソースコードを使って詳しく説明しています。

2023.05.23

トランプ(カード)を扱うクラスを紹介しています。

2019.08.05

配列を使ったフィボナッチ数列を出力するプログラムを作ってみませんか?

2021.03.09

Javaの変数に付ける名前のルールを説明しています。

2019.12.10

広告