AI作成・AIで再検証済(有資格者監修なし)1Z0-826-JPN 対応
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作成・AIで再検証済

解説

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にも該当せず default → 0。

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

各誤答が違う理由
  • Byield を使う case 3 だけが値を返す、と誤解した答え。f(2)=10・f(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が作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

有資格者(著者)が監修した問題は、すべて無料サンプルとして公開しています。買う前に、その全部を実際に解いて解説まで読めます。有料で追加される問題はAIが作成したもので、有資格者の監修は入っていません。

この問題集の作り方

  1. 問題と解説はAIが作成しています。有資格者(著者)が監修した問題は、無料サンプルとして公開している分だけです。有料で追加される問題に監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 解説に載せているコンパイル結果は、実際に javac を走らせた出力です。想定した挙動ではありません。
  5. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  6. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
switch式 を含む問題を分野別に演習できます。
演習する →