【Java-18】分岐構文②switch構文

初心者向けJava講座

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

こんぶ
こんぶ

こんにちは。こんぶです。

今日は、分岐構文の1つである「switch構文」について学んでいきましょう!

私の自己紹介等は、こちらからどうぞ。

また、Javaの学習を最初から進めていきたい方は、Java-1から見てみてくださいね。

switch構文

【Java-17】分岐構文①if構文」で紹介した「if構文」ですが、条件に当てはまる場合は「switch構文」で記載することができます。

「switch構文」の方がコードをスッキリさせることができるので、便利です。

早速ですが、「条件」、「書き方とポイント」、「複数の値で同じ処理を実行する場合」、「分岐が2つの場合の書き換え」について説明していきます。

if構文をswitch構文に書き換える条件としては、次の2つになります。

  • すべての条件式について、左辺と右辺が一致するかを比較する式(==)になっている。(>、<、!=、等は使用されていない)
  • 比較する対象が、整数(byte型、short型、int型のどれか)、文字列(String型)、文字(char型)である。(小数や真偽値ではない)

2つの条件どちらも満たしている場合にのみ「switch構文」に書き換えることができます。

変数等に入っている値に基づいて複数の選択肢から1つを選ぶ場合等に使用します。

「switch構文」には2パターンの記述方法があります。

それぞれの書き方とポイントについて、順番に説明していきます。

パターン1

1つ目の記述方法は、次のようになります。

「変数名等」に入っている値にあわせて処理内容を設定し、指定した値以外の場合には「default」に設定した処理内容(上記画像では「最後の処理内容」)が実行されます。

パターン1のポイントは次の3つです。

  • 2パターン共通:「switch」の直後には変数名等(例:day)を記載する。(「day == 1」等の条件式は記載しない)
  • case」の次には値を書き、その後ろに「->{処理内容}」を記述する。
  • すべての条件に合致しない場合に実行される「default ->{最後の処理内容}」の部分は、条件に合致しない場合の処理が不要であれば省略することもできる。

例として、次のコードを見てみましょう。

こちらのコードでは、「int型の変数 day 」に入っている数値が「1~7」の場合は「月曜日~日曜日」の各曜日を表示し、1~7以外の場合は「その他」と表示されます。

例では、switch構文より前でint型の変数 day を3で初期化しているので「水曜日」と表示されることになりますね。

パターン2

2つ目の記述方法は、次のようになります。この記述方法は、伝統的な記法と言われることもあります。

「変数名等」に入っている値にあわせて処理内容を設定し、指定した値以外の場合には「default」に設定した処理内容(上記画像では「最後の処理内容」)が実行されます。

パターン1では処理内容が「->{」と「}」で囲まれていましたが、パターン2では処理内容が「:」と「break;」で囲まれていますね。

パターン2のポイントは次の4つです。

  • 2パターン共通:「switch」の直後には変数名等(例:day)を記載する。(「day == 1」等の条件式は記載しない)
  • case」の次には値を書き、その後ろに「:」「処理内容」「break;」を記述する。
  • すべての条件に合致しない場合に実行される「default :最後の処理内容 break;」の部分は、条件に合致しない場合の処理が不要であれば省略することもできる。
  • 「break;」を書き忘れてしまった場合、コンパイルエラーにはならず、すぐ下の別のcase部分も続けて実行されてしまうため、注意が必要。

例として、次のコードを見てみましょう。

こちらのコードもパターン1の例と同様に、「int型の変数 day 」に入っている数値が「1~7」の場合は「月曜日~日曜日」の各曜日を表示し、1~7以外の場合は「その他」と表示されます。

例では、switch構文より前でint型の変数 day を3で初期化しているので「水曜日」と表示されることになりますね。

ポイントでもお伝えしましたが、途中の「break;」を書き忘れてしまった場合、すぐ下の別のcase部分も続けて実行されてしまうため注意しましょう。

複数の値で同じ処理を実行したい場合には、「case」の次に複数の値をカンマ区切りで記載することができます。

例えば、値が1と2の時に処理内容1を実行したい場合は、「case 1,2 ->{処理内容1}」もしくは「case 1,2 :処理内容1 break;」のようになります。

「switch構文」の中でも、分岐が2つの場合は、もっとシンプルな式に書き換えることができます。

三項条件演算子」という式で、「型 変数名 = 条件式 ? 値1 : 値2 ;」のように1行で記載できます。(左辺の「型」と「変数名」は、右辺の「値1」と「値2」が入る型と変数名になります)

?」と「:」の2つの記号を使用するのがポイントです!

例えば、「int型の変数 number に入っている数値が0より大きい」という条件式に当てはまる場合は「0より大きい」と表示し、当てはまらない場合は「0以下」と表示させたい場合は次のように記載します。

「String message = (number > 0) ? “0より大きい” : “0以下”;」

表示させたいものが文字列なので「String型の変数 message 」を左辺に準備し、右辺には条件式(int型の変数 number に入っている数値が0より大きい)と値1(0より大きい)と値2(0以下)を記述していますね。

ちなみに、実際に「String型の変数 message 」の内容を表示させる場合には、三項条件演算子の後に「System.out.println(message);」を記述することになりますね。

今回のまとめ

★すべての条件式が左辺と右辺が一致するかを比較する式になっていて、比較する対象が整数文字列文字のどれかの場合は、if構文を「switch構文」に書き換えることができる

★「switch構文」の記述方法は次の2つ

★処理内容が「:」と「break;」で囲まれる記述方法を使用する場合、途中の「break;」を書き忘れてしまうと、すぐ下の別のcase部分も続けて実行されてしまうため注意する

★複数の値で同じ処理を実行したい場合には、「case」の次に複数の値をカンマ区切りで記載する

★switch構文の中でも分岐が2つの場合は、「三項条件演算子」で書き換えることができる

★三項条件演算子では、「型 変数名 = 条件式 ? 値1 : 値2 ;」のように1行で記載する

次回は、「while構文」について説明していこうと思います。

今回の内容のチャレンジ問題はこちらです→チャレンジ問題【Java-18】

次の内容に進む方はこちらです→【Java-19】繰り返し構文①while構文

それでは、こんぶはじゃ~

コメント

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