MENU

【Java Silver】分岐文( if、if/else、switch)の使用と理解

今日の問題を通じて、分岐文の使用について理解を深めましょう。

問題

次のコードを実行した場合の出力は何になるでしょうか?正しい選択肢を選んでください。

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文の代わりに、ケースの最後に’->’を使うことで、より明確な制御が可能です。

目次