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 ) { // 処理文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ソースコードで使い方を解説していきます。以下がそのソースコードです。
Switch1.java ← クリックしてダウンロードページに移動001: public class Switch1 { 002: public static void main( String[] args ) { 003: int a; 004: 005: a = 2; 006: 007: switch ( a ) { 008: case 1: 009: System.out.println( "aの値は1です。" ); 010: break; 011: case 2: 012: System.out.println( "aの値は2です。" ); 013: break; 014: case 3: 015: System.out.println( "aの値は3です。" ); 016: break; 017: default: 018: System.out.println( "aの値は1、2、3ではありません。" ); 019: break; 020: } 021: } 022: }
出力結果
aの値は2です。
005: a = 2;
007: switch ( a ) { 008: case 1: 009: System.out.println( "aの値は1です。" ); 010: break; 011: case 2: 012: System.out.println( "aの値は2です。" ); 013: break; 014: case 3: 015: System.out.println( "aの値は3です。" ); 016: break; 017: default: 018: System.out.println( "aの値は1、2、3ではありません。" ); 019: break; 020: }
a=2なのでcase 2:のSystem.out.println( "aの値は2です。" );が実行されます。
次のサンプルは、case文を並べた例です。
Switch2.java ← クリックしてダウンロードページに移動001: public class Switch2 { 002: public static void main( String[] args ) { 003: int a; 004: 005: a = 4; 006: 007: switch ( a ) { 008: case 1: 009: case 2: 010: System.out.println( "aの値は1または2です。" ); 011: break; 012: case 3: 013: case 4: 014: case 6: 015: System.out.println( "aの値は3または4または6です。" ); 016: break; 017: 018: default: 019: System.out.println( "aの値は1、2、3、4、6以外です。" ); 020: break; 021: } 022: } 023: }
出力結果
aの値は3または4または6です。
005: a = 4;
007: switch ( a ) { 008: case 1: 009: case 2: 010: System.out.println( "aの値は1または2です。" ); 011: break; 012: case 3: 013: case 4: 014: case 6: 015: System.out.println( "aの値は3または4または6です。" ); 016: break; 017: 018: default: 019: System.out.println( "aの値は1、2、3、4、6以外です。" ); 020: break; 021: }
a=4なのでcase 4:のときに実行される処理、System.out.println( "aの値は3または4または6です。" );が実行されます。
次のサンプルは、caseのbreak文を省略したした例です。break文を省略すると条件に合ったcase文から処理が実行されます。処理を進めていきbreak文が見つかるか、switch文の最後まで処理が実行されれば処理を終了します。このサンプルは、これを利用して1~nの合計値を計算するものです。
Switch3.java ← クリックしてダウンロードページに移動001: public class Switch3 { 002: public static void main( String[] args ) { 003: int n, total; 004: 005: // 1~nの合計を計算 006: n = 10; 007: 008: // totalの処理値を0 009: total = 0; 010: switch ( n ) { 011: case 15: 012: total += 15; 013: case 14: 014: total += 14; 015: case 13: 016: total += 13; 017: case 12: 018: total += 12; 019: case 11: 020: total += 11; 021: case 10: 022: total += 10; 023: case 9: 024: total += 9; 025: case 8: 026: total += 8; 027: case 7: 028: total += 7; 029: case 6: 030: total += 6; 031: case 5: 032: total += 5; 033: case 4: 034: total += 4; 035: case 3: 036: total += 3; 037: case 2: 038: total += 2; 039: case 1: 040: total += 1; 041: } 042: // 結果を出力 043: System.out.println( "1~" + n + "の合計 : " + total ); 044: } 045: }
出力結果
1~10の合計 : 55
005: // 1~nの合計を計算 006: n = 10;
int型の変数nに10を代入しています。1から10の合計値を計算させます。
008: // totalの処理値を0 009: total = 0;
合計値を格納するint型の変数totalの初期値に0を代入しています。
010: switch ( n ) { 011: case 15: 012: total += 15; 013: case 14: 014: total += 14; 015: case 13: 016: total += 13; 017: case 12: 018: total += 12; 019: case 11: 020: total += 11; 021: case 10: 022: total += 10; 023: case 9: 024: total += 9; 025: case 8: 026: total += 8; 027: case 7: 028: total += 7; 029: case 6: 030: total += 6; 031: case 5: 032: total += 5; 033: case 4: 034: total += 4; 035: case 3: 036: total += 3; 037: case 2: 038: total += 2; 039: case 1: 040: total += 1; 041: }
合計値を計算するswitch文です。case文の定数は15から1なのでn=1~15の範囲で合計値を計算することができます。case文の定数に対応した箇所から処理が開始されswitch文の最後まで処理を実行します。n=10の場合,21行目の"case 10:"から下の処理を実行します。
042: // 結果を出力 043: System.out.println( "1~" + n + "の合計 : " + total );
実際にプログラムをこのような合計値をprintlnメソッドでコンソール出力しています。
■関連コンテンツ
break文 | ループから処理から抜け出る |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |
■広告