今日の問題を通じて、分岐文の使用について理解を深めましょう。
問題
次のコードを実行した場合の出力は何になるでしょうか?正しい選択肢を選んでください。
public class BranchTest {
public static void main(String[] args) {
int number = 7;
String result = "Default";
switch(number) {
case 1:
result = "One";
break;
case 2:
case 3:
result = "Two or Three";
break;
case 7:
result = "Seven";
// break; // このbreak文がない場合
default:
result = "Not One, Two, Three, or Seven";
break;
}
System.out.println(result);
}
}
選択肢
- A. One
- B. Seven
- C. Not One, Two, Three, or Seven
- D. コンパイルエラー
答えと解説
回答を見る
答え
C. Not One, Two, Three, or Seven
解説
解説のポイント:
- switch文とbreakの役割
- case文が連続する場合の動作
Javaのswitch文は、指定された変数の値に応じて実行するコードブロックを選択するために使用されます。
問題のコードでは、switch文内のcase節にマッチした場合、そのcase節以降のすべてのケースが実行されることがあります。
これは特にbreak文が存在しない場合に起きるので、この特性を”フォールスルー”と呼びます。
今回のコードでは、case ‘7’ の後にbreak文が欠けているため、フォールスルーが発生し、次のdefaultケースも実行されてしまいます。
その結果、result変数には「Not One, Two, Three, or Seven」が設定されます。
基本説明:
Javaのswitch文は、値に応じた複数のケースをチェックする分岐構文の一つです。
switch文は整数型(int, byte, short, char)やそのラッパークラス、列挙型(enum)、文字列型(String)に対応しています。
各case節は、特定の値を受け取ったときにそのブロック内のコードを実行します。
ここで、caseの後に続く文はそのcase節がマッチしたときに実行されます。
break文は、switch文を終了させ、次のcaseの実行を防ぐために使用されます。
これにより、意図しないフォールスルーが起きるのを防ぐことができます。
誤答理由:
一見すると、numberが’7’のときcase ‘7’が実行されるため、「Seven」が出力されるように見えます。
しかし、break文がないため、そのままdefaultケースに進むことになります。
従って、C.「Not One, Two, Three, or Seven」が出力されることになります。
つまずきポイント:
switch文ではbreak文を使うことが一般的です。
これがないと、フォールスルーにより、次のcaseやdefaultのコードが実行されてしまいます。
この特性を理解していないと、意図しない動作が発生しがちです。
発展知識:
Javaのswitch文は、最近のバージョンで柔軟かつ使いやすくなるように改善されています。
特にJava 12以降では、switch文はswitch式としても使えるようになり、結果を直接返せるようになりました。
switch式を使うと、複数のラベルを一つのケースにマッピングしやすくなるほか、フォールスルーのリスクを減少させることができます。
break文の代わりに、ケースの最後に’->’を使うことで、より明確な制御が可能です。