今回はJavaのswitch文で条件分岐する方法について書いています。
載せているコードについては、OpenJDKのバージョン19で動作を確認しました。
switchの使い方
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文で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文を使っていきましょう。
コメント