【Java入門】switch文の使い方!条件分岐する!(case)

Java Java

今回はJavaのswitch文で条件分岐する方法について書いています。
載せているコードについては、OpenJDKのバージョン19で動作を確認しました。

switchの使い方

switch文を使うと、値を参照して条件分岐することができます。
イメージとしては、下記のような感じです。

javaのswitchの使い方

値をswitch文で確認して、それぞれの処理を行うことができます。
例えば、下記のように使うことができます。

int number = 3;
String fruit = "";

switch (number) {
    case 1:
        fruit = "apple";
        break;
    case 2:
        fruit = "banana";
        break;
    case 3:
        fruit = "grape";
        break;
    case 4:
        fruit = "peach";
        break;
    case 5:
        fruit = "orange";
        break;
}

System.out.println(fruit); // grape

最初にnumber変数に数値の「3」を代入しています。
次にfruit変数に空の文字列を代入しました。

次の処理でswitch文を使っています。
switch文の丸括弧「()」の中に指定しているのが、分岐をするために判定したい値です。

switch文の処理の中では、「case 値:」と複数書いています。
これで、switch文に渡された値と同じcaseがあると、そのcase配下の処理が行われます。

今回はnumber変数を指定しているので、number変数の値で分岐します。
プログラムでは「case 値:」を上から確認して行って、「case 3:」と同じ値になるので、その配下の処理が行われます。

fruit変数に「grape」を入れて、breakでswitch文を抜けます。
そして、fruit変数の値を出力しました。
プログラムを実行すると、最後に出力される値は「grape」になります。

switch文のbreakについて

breakはswitch文の中で、caseを抜けるときに使いました。

breakがないときにはどうなるのでしょうか。
このときにはフォールスルーが起こって、そのまま次の処理が実施されます。(次のcaseブロックを実行)

例えば、下記のように処理をします。

int number = 2;

switch (number) {
    case 1:
        System.out.println("りんご!");
        break;
    case 2:
        System.out.println("バナナ!");
    case 3:
        System.out.println("ぶどう!");
    case 4:
        System.out.println("オレンジ!");
        break;
    case 5:
        System.out.println("もも!");
        break;
}

最初にnumber変数に対して、数値の「2」を入れました。

次の処理で、switch文を使って値を判定しています。
そうすると「case 2:」の配下に処理が移って処理されます。
ですが、breakがついていないためフォールスルーされ、そのまま次の処理に移ります。

case 3:」にもbreakがないので、「case 4:」も実行されます。
結果、プログラムを実行すると、下記のように出力されました。

バナナ!
ぶどう!
オレンジ!

このようにbreakがないときには、そのまま下の方に処理が移っていきます。
breakを入れ忘れないように気をつけていきましょう。

この動作を使って、下記のように、いくつかの値のときに処理をまとめることもできます。

int number = 3;

switch (number) {
    case 1:
        System.out.println("値は1です!");
        break;
    case 2:
    case 3:
    case 4:
        System.out.println("値が2・3・4です!");
        break;
    case 5:
        System.out.println("値は5です!");
        break;
}

処理によっては、このようにまとめて使うのも良いかと思います。

switch文のdefaultについて

switch文の中で、caseと同列にdefaultを書くことができます。
defaultを書いておくと、caseに合わなかったときのデフォルトの処理を定義できます。

例えば、下記のように使います。

int number = 100;

switch (number) {
    case 1:
        System.out.println("りんごです!");
        break;
    case 2:
        System.out.println("ぶどうです!");
        break;
    case 3:
        System.out.println("バナナです!");
        break;
    default:
        System.out.println("何かのフルーツ!");
        break;
}

最初にnumber変数に数値の「100」を代入しました。

次の処理で、switch文を使ってnumber変数を判定しています。
値が「100」なので、どのcaseにも該当しません。
そのためdefault配下の処理を通ります。

このプログラムを実行すると「何かのフルーツ!」を出力して、処理が終わります。
このように、どのcaseにも該当しないときに、default配下の処理が実行されます。

switch文にnullを入れると?

switch文にnullを指定するとエラーになります。
例えば、下記のような処理のときです。

String fruit = null;

switch (fruit) {
    case "apple":
        System.out.println("りんごです!");
        break;
    case "grape":
        System.out.println("ぶどうです!");
        break;
    case "banana":
        System.out.println("バナナです!");
        break;
    default:
        System.out.println("何かのフルーツ!");
        break;
}

最初にfruit変数にnullを代入しています。
その次の処理でswitch文で処理をしていますが、プログラムを実行すると、下記のように「NullPointerException」が発生します。

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.hashCode()" because "<local3>" is null

switch文を使う前にnullチェックをしておくと良いかと思います。
下記は三項演算子を使って、nullだったときには空文字、そうでなかった場合はそのままfruit変数の値を入れています。

String fruit = null;
fruit = fruit == null ? "" : fruit;

switch (fruit) {
 // --- 省略 ---
}

switchの使い方まとめ

今回はJavaのswitch文の使い方について書きました。
記事の内容をまとめると、下記のようになります。

・switch文を使うことで、値を判定して処理を分岐できた。
・switch文でbreakを記載することで、switch文の処理を抜けれた。
・breakがないときには、フォールスルーで下のcaseブロックが実行された。
・switch文でdefaultを書くと、どのcaseにも合わない時のdefault処理が実行できた。
・switch文にnullを指定すると、実行時エラーになる。(nullチェックを入れて回避)

if文との使い分けについて

条件分岐といえば、if文でも分岐ができます。
値が同じかどうかで、複数の分岐をするときにはswitch文を使う方が見やすいコードになるかと思います。

例えば、if文で書くと、下記のようになります。

String fruit = "banana";

if (fruit == "apple") {
    System.out.println("りんご");
} else if (fruit == "banana") {
    System.out.println("ばなな");
} else if (fruit == "grape") {
    System.out.println("ぶどう");
}

switch文で書くと、下記のようになります。

String fruit = "banana";

switch (fruit) {
    case "apple":
        System.out.println("りんご");
        break;
    case "banana":
        System.out.println("ばなな");
        break;
    case "grape":
        System.out.println("ぶどう");
        break;
}

コードが見やすくなった感じがしませんか?
単純に値が同じか確認していくときにはswitch文を使っていきましょう。

コメント

タイトルとURLをコピーしました