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

解説

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 を連結した 124816print なので区切り無し)。

各誤答が違う理由
  • 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が作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
Stream API を含む問題を分野別に演習できます。
演習する →