【Java】多数の条件分岐ならswitch文!使い方をサンプルコードで解説!
多数の条件の処理を行いたいならswitch文を使用します。
条件分岐はif文をイメージしますが、分岐が多くなった場合にはswitch文が使われます。
分岐が多い場合でもif文で書いても良いのですが、if-else-if文が続き、コードが長くなり分かりづらくなることがあります。
しかし、switch文を使用すると、if-else-ifと同じ処理を書くことができ、if文よりもコードが読みやすくなります。
今回はswitch文の
⚫︎ 基本的な使い方
⚫︎ 応用的な使い方
について解説していきます。
目次
switch文とは
switch文はif文のように条件分岐を行う構文です。
しかし、if文と比べて、switch文は条件が多い場合に適応した構文になります。
switch文の書き方
switch-case文の構文は次のように記述します。
1 2 3 4 5 6 7 8 9 10 |
switch (式) { case 値A: // 式の値と値Aが一致したときの処理 break; case 値B: // 式の値と値Bが一致したときの処理 break; default: // 式の値がどのcaseの値とも一致しなかったときの処理 } |
switch文が式の値、それを各caseの値と比較します。
値が特定のcaseと一致する場合、一致するcaseの処理が実行されます。
たとえば、switch(式)の値が2である場合、2の値に一致するcaseが実行されます。
しかし、各ケースでのbreak句の使用に注意してください。
break文はswitch文の実行の終了するために使用されます。
break句が使用されない場合、一致するケースの後のすべてのswitch文が終わりまで順番に実行されるため注意してください。
switch文の基本的な使い方
switch-case文の基本的な使い方を見てみきます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
class Main { public static void main(String[] args) { int week = 4; String day; switch (week) { case 1: day = "日曜日"; break; case 2: day = "月曜日"; break; case 3: day = "火曜日"; break; case 4: day = "水曜日"; break; case 5: day = "木曜日"; break; case 6: day = "金曜日"; break; case 7: day = "土曜日"; break; default: day = "エラー"; break; } System.out.println("day + "です。"); } } |
出力結果
水曜日です。
このコードでは、式の値とcaseの値を比較し、
一致した値の処理を実行しています。
今回はweekの値が4となり、dayの値が水曜日となります。
そのため、「水曜日です。」という文字が表示されます。
default句
switch文の式の値がどのcaseの値とも一致しなかった場合には、defaultに書かれた処理が実行されます。
defaultの使い方を先ほどのコードで確認してみましょう。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
class Main { public static void main(String[] args) { int week = 100; String day; switch (week) { case 1: day = "日曜日"; break; case 2: day = "月曜日"; break; case 3: day = "火曜日"; break; case 4: day = "水曜日"; break; case 5: day = "木曜日"; break; case 6: day = "金曜日"; break; case 7: day = "土曜日"; break; default: day = "エラー"; break; } System.out.println("day + "です。"); } } |
出力結果
エラーです。
今回はweekの値を100に変更し、
switchの式の値がcaseのどの値とも一致しなくなりました。
その際に、プログラムはどのcaseの値にも一致しなかったということで
defaultに書かれた処理を実行し、dayの値がエラーとなり「エラーです。」と表示しています。
break句
switch文でのbreakは、ループ文でのbreakと似たような意味を持ち、switch文から抜ける動きをします。
switch文で要注意なのが、breakをしなければ次にあるcaseに処理が移ってしまうことです。
この動きを「フォールスルー(fall through)」とも呼ぶのですが、
breakはそれを止めるためにもあります。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
class Main { public static void main(String[] args) { int week = 5; String day; switch (week) { case 1: day = "日曜日"; break; case 2: day = "月曜日"; break; case 3: day = "火曜日"; break; case 4: day = "水曜日"; break; case 5: day = "木曜日"; case 6: day = "金曜日"; break; case 7: day = "土曜日"; break; default: day = "エラー"; break; } System.out.println("day + "です。"); } } |
出力結果
金曜日です。
caseの値が5の場合、break句がない為、5の場合の処理を実行した後に6の場合の処理が実行されます。
つまり、dayの値が「木曜日」から「金曜日」に上書きされてしまいます。
switch文のの応用的な使い方
月の初めと月の終わりの日数を計算
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
public class Main { public static void main(String[] args) throws Exception { int start = 2; int end = 12; int date = 0; switch (start) { case 1: date = dateCalc(start, end); break; case 2: date = dateCalc(start, end); break; case 3: date = dateCalc(start, end); break; case 4: date = dateCalc(start, end); break; case 5: date = dateCalc(start, end); break; case 6: date = dateCalc(start, end); break; case 7: date = dateCalc(start, end); break; case 8: date = dateCalc(start, end); break; case 9: date = dateCalc(start, end); break; case 10: date = dateCalc(start, end); break; case 11: date = dateCalc(start, end); break; case 12: date = dateCalc(start, end); break; } System.out.println(start + "月から" + end + "月までの日数は" + date + "日です。" ); } public static int dateCalc(int start, int end) { int date1 = 0; for (int i = start; i <= end; i++) { if(i == 2) { date1= date1 + 28; } else if(i == 4 || i == 6 || i == 9 || i == 11) date1 = date1 + 30; } else { date1 = date1 + 31; } return date1; } } |
出力結果
2月から12月までの日数は334日です。
今日のポイント
switch文で多数の条件の処理を行う
⚫︎ 多数の条件処理を行う場合はswitch文を使用する
⚫︎ break句を使用することでswitch文から抜けることができる
(break句を書かないと処理がswitchの処理が続いてしまう)
⚫︎ default句を使用することでswitch文の式の値がどのcaseの値とも一致しなかった場合の処理が実行される
補足
Stringによるswitch文
int型だけでなく、String型の変数をswitch文で判定することができます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class Main { public static void main(String[] args) throws Exception { String strA = "ABC"; switch (strA) { case "ABC": System.out.println("ABCです。" ); break; case "XYZ": System.out.println("XYZです。" ); break; default: System.out.println("ヒットしませんでした。" ); break; } } } |
出力結果
ABCです。
関連記事
if文についてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。