Javaのswitch文とは?書き方や使い方をわかりやすく解説

Javaを勉強し始めると、まず最初に出会うのが「条件分岐」です。
この記事では、Javaのswitch文について、プログラミング初心者の方でも理解できるように解説していきます。
コード付きの例を使って、switch文の基本から応用、さらには実践的な演習問題までカバーしていきます。
記事の最後には「よくある質問」もまとめているので、switch文に関する多くの疑問を解消できますよ。
switch文とは?
switch文(スイッチぶん)は、変数の値に応じて、実行する処理を切り替えるための便利な文法です。
以下、サンプルコードです。
public class SwitchSample {
public static void main(String[] args) {
int day = 3;
switch (day) {
case 1:
System.out.println("月曜日です");
break;
case 2:
System.out.println("火曜日です");
break;
default:
System.out.println("1から7の間で入力してください");
}
}
}
「ある値が〇ならこの処理、△ならあの処理」といったように、ひとつの変数の値をもとに分岐したいときに使います。
if文でも同じことはできますが、似たような条件を何回も書くことになるため、コードが長くなってしまいます。switch文を使えば、それをすっきりと簡潔に書くことができます。
if文との違い
たとえば、数値や文字列など、1つの変数に対していくつもの候補がある場合、if文を何回も使って条件を書くのは大変です。
そのようなときにswitch文を使うと、同じ変数に対する条件を整理して書けるので、コードが見やすくなります。
どんなときに使うの?
switch文は、以下のような場面でよく使われます。
- 曜日ごとに異なる処理をしたいとき
- 点数やランクに応じたメッセージを出したいとき
- 選択肢(メニュー)に応じて処理を分けたいとき
このように、「1つの値に対していくつかの選択肢がある」という場面で、switch文は非常に便利です。
基本的なswitch文の書き方
実際のコードを見ながら、switch文の書き方を学んでいきましょう。
public class SwitchSample {
public static void main(String[] args) {
int day = 3;
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:
case 7:
System.out.println("週末です");
break;
default:
System.out.println("1から7の間で入力してください");
}
}
}
この例では、変数day
に数値を代入し、その値に応じて曜日を表示しています。値が1なら「月曜日」、3なら「水曜日」、6や7なら「週末です」と表示される仕組みです。
解説:switch文の構造
switch (変数)
:ここで分岐のもとになる変数を指定します。case 値:
:この値だった場合の処理を書きます。break;
:そのcaseの処理が終わったら、switch文を抜けます。default:
:どのcaseにも当てはまらなかった場合の処理です。
switch文のポイントと注意点
switch文の重要なポイントと注意点を解説します。
breakを忘れない
switch文の中でbreak;
を書くのを忘れてしまうと、次のcaseの処理まで実行されてしまいます。これを「フォールスルー(fall through)」と呼びます。
予期しない挙動になることが多いので、基本的には各caseの最後にbreak;
を入れるようにしましょう。
使用できる型
switch文で使える型は以下の通りです。
- int、short、byteなどの整数型
- char(文字型)
- String(文字列型:Java 7以降)
- enum(列挙型)
floatやdoubleといった小数点のある型は使えません。
String型もswitch文で使える!
Java 7からは、String型もswitch文で使えるようになりました。文字列によって処理を分けたいときに、とても便利です。
public class SwitchString {
public static void main(String[] args) {
String fruit = "りんご";
switch (fruit) {
case "りんご":
System.out.println("赤い果物です");
break;
case "バナナ":
System.out.println("黄色い果物です");
break;
case "ぶどう":
System.out.println("紫の果物です");
break;
default:
System.out.println("見知らぬ果物です");
}
}
}
このコードでは、fruit
が”りんご”のときに「赤い果物です」と表示されます。条件によってメッセージを変えたいときに便利です。
enumとswitch文の組み合わせ
Javaにはenum
という、あらかじめ決められた定数を定義できる便利な型があります。switch文とenumを組み合わせることで、より安全で明確なコードが書けるようになります。
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public class SwitchEnum {
public static void main(String[] args) {
Day today = Day.SATURDAY;
switch (today) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
System.out.println("平日です");
break;
case SATURDAY:
case SUNDAY:
System.out.println("週末です");
break;
}
}
}
enum型を使うと、プログラム中で使える値を限定できるので、タイプミスや不正な値によるバグを防ぐことができます。
演習問題に挑戦しよう!
以下の問題にチャレンジして、switch文の理解を深めましょう。
問題1:数値に応じてメッセージを表示
変数score
が80のとき、「合格です」と表示するswitch文を作ってください。それ以外の点数のときは「不合格です」と表示しましょう。
解答例:
int score = 80;
switch (score) {
case 100:
case 90:
case 80:
System.out.println("合格です");
break;
default:
System.out.println("不合格です");
}
問題2:曜日に応じた行動
変数day
が”日曜日”のとき、「休みです」と表示するコードを書いてください。平日のときは「勉強しましょう」と表示します。
解答例:
String day = "日曜日";
switch (day) {
case "土曜日":
case "日曜日":
System.out.println("休みです");
break;
default:
System.out.println("勉強しましょう");
}
問題3:enumで季節を分ける
春・夏・秋・冬の季節に応じて、異なるメッセージを表示するコードを書いてみましょう。
解答例:
enum Season {
SPRING, SUMMER, AUTUMN, WINTER
}
Season now = Season.AUTUMN;
switch (now) {
case SPRING:
System.out.println("お花見の季節ですね");
break;
case SUMMER:
System.out.println("海に行きたいですね");
break;
case AUTUMN:
System.out.println("紅葉がきれいですね");
break;
case WINTER:
System.out.println("こたつが恋しい季節です");
break;
}
よくある質問(FAQ)
よくある質問です。
Q1. switch文とif文、どっちを使うべきですか?
A. 変数の値が1つで、その値によって処理を分けたい場合はswitch文が適しています。複数の条件を組み合わせたり、範囲で条件を指定したいときはif文の方が向いています。
Q2. switch文で数値の範囲(例:0〜10)を指定できますか?
A. switch文では、値そのものにしか反応できないため、範囲を指定することはできません。範囲を使いたい場合はif文を使う必要があります。
Q3. switch文のcaseで複数の値に同じ処理をさせることはできますか?
A. はい、case 1: case 2:
のように続けて書くことで、同じ処理をさせることが可能です。
Q4. defaultは絶対に書かないとダメ?
A. 書かなくてもコンパイルは通りますが、予期しない値が来たときに備えて書いておくのが一般的です。
Q5. switch文の中で他のswitch文を使うことはできますか?
A. はい、ネスト(入れ子)構造にして使うことも可能です。ただし、コードが複雑になるので注意しましょう。
まとめ
Javaのswitch文は、慣れると非常に便利で、コードをすっきりと書ける強力なツールです。基本的な使い方を覚えてしまえば、あとは応用するだけです。
ぜひ、紹介した演習問題やサンプルコードを自分の手で書いて、switch文の使い方を身につけてくださいね。