switch文_if/else_文と同じように、switch文を使うと、条件によって実行するコードを切り替え、プログラムの流れを変えることができます。
違うのは、switch文が比較できるのは、プリミティブ型または文字列の式の値を、あらかじめ定義された定数と比べる場合だけという点です。
switch文を使うときには、役に立つキーワードがいくつかあります。
switch:このキーワードを使うと、switchの構造を宣言できます。
そのあとには、結果を変えるもとになる式または変数が続きます。case:このキーワードは、結果としてあり得る選択肢を宣言するために使います。break:breakキーワードは、意図した流れの終わりでswitchの実行を止めるのに役立ちます。
これを忘れると、プログラムはそのまま続いてしまい、予想外の結果になることがあります。default:名前のとおり、式の結果がどのcaseにも当てはまらないときの、既定の結果として使います。もっとも単純な形では、プリミティブ型または文字列の式を判定し、その値をもとに処理を決めます。 たとえば次のようになります。
String direction = getDirection();
switch (direction) {
case "left":
goLeft();
break;
case "right":
goRight();
break;
default:
// otherwise
markTime();
break;
}
サッカークラブのウェブサイトで、スタッフが試合をレポートできるようにするシステムを開発しています。データはさまざまなソースから受け取り、クリーンアップされたあとに1つのストリームへまとめられます。
このチームは4-3-3のフォーメーションしか使いません。選手交代を認める1965年のルール変更にも同意していませんし、ましてや選手層の拡大など問題外です。
選手の説明は次のとおりです。
1 -> "goalie"
2 -> "left back"
3 & 4 "center back"
5 -> "right back"
6, 7, & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"
シャツの番号から選手の説明を出力するstaticなFootballMatchReports.onField()メソッドを実装しましょう。
FootballMatchReports.onField(10);
// => "striker"
1〜11の範囲外のシャツの番号が処理されたときは'invalid'を返すように、FootballMatchReports.onField()メソッドを修正しましょう。
FootballMatchReports.onField(13);
// => "invalid"