Java の switch 文とは?if 文の代わりに使える分岐処理
新人
「Java で条件分岐をするときに、if 文以外の方法はありますか?」
先輩
「あるよ!Java には switch 文 という分岐処理の方法があるんだ。」
新人
「switch 文って何ですか?」
先輩
「switch 文は、特定の値に応じて処理を分けられる便利な分岐方法だよ。詳しく説明していくね!」
1. switch 文とは?(基本的な説明)
Java の switch 文 は、特定の値に応じて異なる処理を実行するための分岐処理です。
switch 文の特徴
- 変数の値によって異なる処理を実行できる
- if 文よりもスッキリと書くことができる
- 整数や文字列の値に応じた分岐が可能
例えば、1 から 3 の数値によって異なるメッセージを表示する switch 文を作成できます。
2. switch 文の基本的な書き方
switch 文は、特定の値に応じて異なる処理を実行するための構文です。基本的な書き方を見てみましょう。
switch 文の基本構文
public class SwitchExample {
public static void main(String[] args) {
int num = 2;
switch (num) {
case 1:
System.out.println("選択肢は 1 です");
break;
case 2:
System.out.println("選択肢は 2 です");
break;
case 3:
System.out.println("選択肢は 3 です");
break;
default:
System.out.println("無効な選択肢です");
}
}
}
選択肢は 2 です
switch 文の構造
- case:それぞれの値ごとに処理を定義
- break:処理の実行を終了する
- default:どの case にも該当しない場合の処理
例えば、num が 2 の場合、対応する case の処理が実行されます。
switch 文のポイント
- 変数の値に応じた処理を簡単に記述できる
- break を書かないと次の case の処理も実行される
- 整数(
int)、文字列(String)、列挙型(enum)の値を使える
例えば、break を書かないと、次の case も実行されてしまいます。
3. switch 文を使って数値を判定する方法
switch 文を使うと、数値の値によって異なる処理を実行することができます。例えば、特定の数値に応じてメッセージを表示するプログラムを作成してみましょう。
数値を判定する switch 文の例
public class NumberCheck {
public static void main(String[] args) {
int number = 3;
switch (number) {
case 1:
System.out.println("選択した数値は 1 です。");
break;
case 2:
System.out.println("選択した数値は 2 です。");
break;
case 3:
System.out.println("選択した数値は 3 です。");
break;
default:
System.out.println("範囲外の数値です。");
}
}
}
選択した数値は 3 です。
ポイント
- 変数
numberの値に応じて case の処理が実行される breakを入れないと、次の case も続けて実行されるdefaultはどの case にも該当しない場合の処理
このように、switch 文を使うと if 文よりもスッキリとしたコードになります。
4. switch 文を使って文字列を判定する方法
Java の switch 文では、数値だけでなく String 型の値を判定することもできます。例えば、曜日の名前を入力し、それに応じたメッセージを表示するプログラムを作成してみましょう。
文字列を判定する switch 文の例
public class DayCheck {
public static void main(String[] args) {
String day = "水曜日";
switch (day) {
case "月曜日":
System.out.println("今日は月曜日です。");
break;
case "火曜日":
System.out.println("今日は火曜日です。");
break;
case "水曜日":
System.out.println("今日は水曜日です。");
break;
default:
System.out.println("該当する曜日ではありません。");
}
}
}
今日は水曜日です。
ポイント
- 変数
dayの値によって異なるメッセージを表示 - 文字列比較のため、大文字・小文字の違いに注意
- どの case にも該当しない場合は
defaultで対応
このように、switch 文を使うと、複数の条件分岐を簡潔に記述できます。
5. switch 文と if 文の違い
switch 文と if 文はどちらも条件分岐を行うための構文ですが、いくつかの違いがあります。比較表を見てみましょう。
switch 文と if 文の比較
| 比較項目 | switch 文 | if 文 |
|---|---|---|
| 適用範囲 | 特定の値と一致するかどうか | 数値・文字列・条件式をすべて判定可能 |
| 書き方 | case ごとに処理を記述 | 複数の条件を else if で書く |
| 適した場面 | 特定の値に応じた処理をする場合 | 複雑な条件を判定する場合 |
if 文を使った場合
public class IfExample {
public static void main(String[] args) {
int num = 2;
if (num == 1) {
System.out.println("選択肢は 1 です");
} else if (num == 2) {
System.out.println("選択肢は 2 です");
} else if (num == 3) {
System.out.println("選択肢は 3 です");
} else {
System.out.println("無効な選択肢です");
}
}
}
選択肢は 2 です。
switch 文を使った場合
public class SwitchExample {
public static void main(String[] args) {
int num = 2;
switch (num) {
case 1:
System.out.println("選択肢は 1 です");
break;
case 2:
System.out.println("選択肢は 2 です");
break;
case 3:
System.out.println("選択肢は 3 です");
break;
default:
System.out.println("無効な選択肢です");
}
}
}
選択肢は 2 です。
どちらを使うべきか?
- 特定の値ごとに処理を分岐 … switch 文が適している
- 複雑な条件式を判定 … if 文を使う
- 数値・文字列の判定 … switch 文でも if 文でも対応可能
例えば、「1、2、3 のどれかに該当するか?」という場合は switch 文が便利ですが、「A かつ B のときに処理を実行する」といった条件は if 文を使う方が適しています。
6. switch 文を使った応用例(複数のケースをまとめる)
switch 文では、同じ処理を実行する複数の値をまとめることができます。例えば、1 月から 3 月までを「冬」、4 月から 6 月までを「春」などのように分類する場合を考えてみましょう。
複数のケースをまとめた switch 文の例
public class SeasonCheck {
public static void main(String[] args) {
int month = 2; // 例: 2 月
switch (month) {
case 12: case 1: case 2:
System.out.println("冬です。");
break;
case 3: case 4: case 5:
System.out.println("春です。");
break;
case 6: case 7: case 8:
System.out.println("夏です。");
break;
case 9: case 10: case 11:
System.out.println("秋です。");
break;
default:
System.out.println("無効な月です。");
}
}
}
冬です。
ポイント
- 同じ処理を実行する複数の値を
caseでまとめて記述できる - 重複したコードを減らし、可読性を向上させることができる
breakを入れることで、不要な case まで処理が実行されるのを防げる
この方法を使うと、複数の値に共通する処理を効率よく記述できます。
7. switch 文を使った応用例(break を使わない場合)
通常、switch 文では break を使って処理を終了させますが、あえて break を使わないことで、連続した case の処理を実行することもできます。
break を使わない switch 文の例
public class NoBreakExample {
public static void main(String[] args) {
int rank = 2;
switch (rank) {
case 1:
System.out.println("金メダル");
case 2:
System.out.println("銀メダル");
case 3:
System.out.println("銅メダル");
break;
default:
System.out.println("ランク外です。");
}
}
}
銀メダル
銅メダル
ポイント
breakを省略すると、次の case の処理も実行される- 特定の case からすべての処理を実行したい場合に有効
- 意図しない動作を防ぐため、適切な case で
breakを入れることが重要
このように、break を使わないことで、特定のケースに応じた追加の処理を実行できます。
8. 練習問題:switch 文を使ったプログラムを作ろう
最後に、switch 文の理解を深めるために、練習問題を解いてみましょう。以下のプログラムを完成させて、曜日を判定するプログラムを作成してください。
練習問題
ユーザーが入力した数値(1 〜 7)に応じて、対応する曜日を表示するプログラムを作成してください。
import java.util.Scanner;
public class WeekdayCheck {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("1 〜 7 の数値を入力してください: ");
int day = scanner.nextInt();
switch (day) {
case 1:
System.out.println("日曜日");
break;
case 2:
System.out.println("月曜日");
break;
case 3:
System.out.println("火曜日");
break;
case 4:
System.out.println("水曜日");
break;
case 5:
System.out.println("木曜日");
break;
case 6:
System.out.println("金曜日");
break;
case 7:
System.out.println("土曜日");
break;
default:
System.out.println("1 〜 7 の範囲で入力してください。");
}
scanner.close();
}
}
1 〜 7 の数値を入力してください: 3
火曜日
ポイント
- ユーザーの入力を
Scannerで取得 - 入力した値に応じて曜日を表示
defaultで範囲外の値を処理
この問題を実際にプログラムとして動かし、switch 文の使い方に慣れていきましょう!
Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。
スッキリわかるJava入門 第4版をAmazonで見る※ Amazonアソシエイト・プログラムを利用しています