AI作成・AIで再検証済(有資格者監修なし)1Z0-826-JPN 対応
Stream(3引数 iterate=有限ストリーム)難易度 標準無料

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

1  import java.util.stream.*;
2  public class Q8 {
3      public static void main(String[] a) {
4          Stream.iterate(1, n -> n <= 16, n -> n * 2)
5                .forEach(System.out::print);
6      }
7  }
  1. A124816
  2. B12481632
  3. C1248
  4. D無限ループ(limit が無いため終わらない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・AIで再検証済

解説

Stream.iterate には2種類ある。

  • 2引数版 iterate(seed, next):無限ストリーム。limit 等で止めないと終わらない。
  • 3引数版 iterate(seed, hasNext, next)(Java 9 で追加):述語 hasNext が false になった時点で終了する有限ストリーム。for文(for(i=seed; hasNext; i=next))に相当。

本問は3引数版。述語 n <= 16 は各要素を出す前に評価される: 1(1<=16 ✓ 出力) → 2 ✓ → 4 ✓ → 8 ✓ → 16(16<=16 ✓ 出力) → 次は 32(32<=16 ✗ 終了)。 よって出力は 1 2 4 8 16 を連結した 124816(print なので区切り無し)。

各誤答が違う理由
  • B32 は述語 32 <= 16 が偽なので出力されない(生成前に打ち切られる)。
  • C境界は n <= 16(以下)なので 16 も含まれる。<(未満)と取り違えた誤り。
  • Dこれは3引数版 iterate(Java 9)。述語 hasNext が終了条件になるので有限で止まる。無限になるのは2引数版。
ひっかけ: 2引数 iterate(無限)と3引数 iterate(Java 9・有限)を混同すると「無限ループする」を選ぶ。境界 n <= 16 は「以下」なので 16 も出力に含まれる(< なら 8 まで)。
実機確認の答え合わせ
出力:
124816
AIが作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

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

この問題集の作り方

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