AI作成・独立検証済(有資格者監修なし)1Z0-829 対応
switch式(アロー / yield / fall-through無し)難易度 標準無料

次のコード(Java 17)の出力として正しいものを選べ。

 1  public class Q1 {
 2      static int f(int n) {
 3          return switch (n) {
 4              case 1, 2 -> 10;
 5              case 3    -> { yield 30; }
 6              default   -> 0;
 7          };
 8      }
 9      public static void main(String[] a) {
10          System.out.println(f(2) + f(3) + f(9));
11      }
12  }
  1. A40
  2. B30
  3. Cコンパイルエラー(case 3 のブロックに yield が必要)
  4. D0
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

switch式(アロー構文)は従来の case:(コロン)と違い、fall-through(次のcaseへの流れ込み)が起きない。 各ラベルに対応するのは右辺の式1つ、または { ... yield 値; } のブロックだけで、break も不要。

  • f(2)case 1, 2(複数ラベルは1つに束ねられる)にマッチ → 10。fall-throughしないので他caseは走らない。
  • f(3)case 3 はブロック本体なので値の返却に yield が必須 → 30
  • f(9):どのcaseにも該当せず default0

合計は 10 + 30 + 0 = 40。switchは値を返すので return switch(...) {...}; と書ける。

各誤答が違う理由
  • Byield を使う case 3 だけが値を返す、と誤解した答え。f(2)=10f(9)=0 も加算されるので合計40。
  • Cブロック本体には確かに yield が必要だが、コードには yield 30; が有り正しく書かれている。よってコンパイルは通る。
  • Ddefault だけが評価されるとした誤り。f(2)f(3) はそれぞれ該当caseにマッチする。
ひっかけ: アロー構文の switch は fall-through しない(コロン構文の癖で「複数caseが流れ込んで加算」と誤読しやすい)。ブロック本体({ })で値を返すには yield が必須で、これは正しく書かれているためコンパイルは通る。
実機確認の答え合わせ
出力:
40
公式ドキュメント・関連JLS SE17 §15.28 switch Expressions
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
switch式 を含む問題を分野別に演習できます。
演習する →