【Java】分岐をswitchで実現させる方法
これまで、当ブログではJavaを使ったプログラムを扱いました。
今回はJavaを学習するうえで、基本的な分岐を書くために必要な構文の1つである「switch-case文」について扱いたいと思います。
switch-case文とif-else文の違い
if-else文でも多くの選択肢がある分岐を記述することはできます。しかし、どの場合だったらどれ、そうじゃなかったらその中でこの場合はこれ…という風に、コードの記述量に差はなくても可読性が低下してしまいがちです。
switch-case文だと、たとえばユーザーが1を入力したらこの処理、2を入力したらこの処理…10を入力したらこの処理、という風に選択肢がどれだけ増えてもコード量は当然増えますが可読性はほぼ変わりません。
ただ、if-else文の方が可読性が高くなるケースもありますので、使い分けが大事になってくるかと思います。
サンプルコード
今回は、有吉弘行さんが過去に芸能人に付けたあだ名を表示するプログラムを作りたいと思います。と言っても、膨大な数があるので、今回は私の独断と偏見で木村拓哉さん・ボビーオロゴン・島田紳助さん・千原ジュニアさん・みのもんたさんの5人のあだ名を表示するというプログラムを作ることにしました。
import java.util.Scanner;
class list20210315 {
public static void main (String[] args) {
Scanner stdIn = new Scanner(System.in);
int num;
System.out.println ("あだ名を表示する芸能人の名前を選んでください(1~5)");
System.out.println ("1:木村拓哉 2:島田紳助 3:千原ジュニア 4:ボビーオロゴン 5:みのもんた");
num = stdIn.nextInt();
switch (num) {
case 1:
System.out.println ("木村拓哉さんのあだ名は「月9バカです」");
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;
default:
System.out.println ("数字が正常に選ばれていません");
break;
}
}
}
屁理屈ガイコツとか、油トカゲとか、凄く怖いシャモジとか…有吉さんのネーミングセンス凄いです(笑)。
サンプルコードの説明
switch-case文の全体像を図1に示します。
switchの後には式が入ります。この式の評価に応じてどのcase文が実行されるかが決まります。
このプログラムの場合、ユーザがどの数字を入力されたかによって処理内容を決定する必要があるので、変数numが該当します。変数numの値によって該当するcase文に飛びます。
例えば、3を入力した場合、case 3:の部分に飛びます。そして、「千原ジュニアさんのあだ名は屁理屈ガイコツです」と表示した後、break文があるのでswitch-case文を抜けてプログラムが終了します。
もしここで、「千原ジュニアさんの~」の後ろのbreak文がなかったらどういう結果になるか分かりますか?
正解は、switch-case文を抜けずにcase 4:の「ボビーオロゴンのあだ名は~」の部分も続けて表示されます。基本的にはbreak文を記載してすぐにswitch-case文を抜けるように記述するのですが、場合によってはbreak文をあえて書かない方が都合がいいプログラムもあるので、時と場合に応じてbreak文は使いましょう。
サンプルコードには、defaultという文字列が入っていますね。これは、どのcase文も該当しなかった場合に実行されます。例えば9と入力すると、該当するcase文を記述していないため、default文が実行されます。case5のあとにcase9について記述することにより、9が入力された場合の処理を新たに記述することができます。
まとめ
今回は、switch-case文について解説しました。switch-case文で記述できる内容は、だいたいif-else文でも記述することが可能です。どちらの方が分かりやすいか・見やすいか・記述量が少ないかなどは、場合によって異なりますので、臨機応変に対応することが大切です。しかし、一般的には、単一の式の値による分岐はswitch-case文で記述した方がよい場合が多いです。
また、if-else文とswitch-case文は、どちらともプログラムの流れを分岐させるものなので、まとめて選択文と呼ばれます。
今回の内容は以上です。参考になればうれしいです。
最後までお読みいただき、ありがとうございました。