Java 8 練習問題 上級編 その18
Java 8 練習問題 上級編
Java 8 練習問題 上級編
動作環境と問題内容について
javaの練習問題です。 出題範囲はjava 8 で追加された範囲を中心とします。難易度は Java SE 8 Programmer II の試験と同程度※を想定しています。
※ただし、場合によっては同試験には出題されない内容や形式が含まれることもあります。あくまでも難易度の目安として解答してください。
実行環境は以下の通りです。
JDKのバージョン:java 8 Update181
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
問題
次のプログラムを作成した。コンパイル、実行に関して以下の問いに答えなさい。
プログラム(Sample.java)
import java.util.stream.IntStream; public class Sample{ public static void main(String[] args){ IntStream.range(3,1).forEach(System.out::print); } }
問.Sample.javaをコンパイル、実行するとどうなるか。下記の選択肢 a ~ j から正しいものを選べ。
選択肢
a. 3と表示される
b. 32と表示される
c. 321と表示される
d. 2と表示される
e. 21と表示される
f. 1と表示される
g. コンパイルエラー
h. 実行時エラー
i. コンパイル・実行ともにできるが何も表示されない
j. 3456…と表示され、実行が終わらない
解答
i. コンパイル・実行ともにできるが何も表示されない
解説
今回は IntStream 型 の range() メソッドを利用している。
IntStream 型は Oracle の公式ドキュメントによると次のように記載されている。
「順次および並列の集約操作をサポートするプリミティブint値要素のシーケンスです。」
Oracle の公式ドキュメントによると、IntStream 型は、range() メソッドは以下のように記載されている。
「startInclusive(含む)からendExclusive(含まない)の範囲でステップ1でインクリメントした値を含む、順序付けされた順次IntStreamを返します。」
なお、戻り値は 引数で指定した範囲の数値を構成要素とする IntStream オブジェクトである。
今回の問題では、IntStream.range(3,1) となっている。
一見すると、「3以上1未満」なのでコンパイルエラーになりそうだが、実際にはコンパイルは正常終了し、実行もできる。
ただし、実行しても、生成された IntStream オブジェクトの中には要素がない。
以上から、コンパイル・実行ともにできるが何も表示されない。
Stream API の利用時にはラムダ式やメソッド参照、Optional 型や OptionalInt 型といった、Java 7 以前の環境にはなかったクラスや書き方が使用可能となっている。
設計や実装時には十分に注意する必要がある。
<<前回の問題はこちら | 第1問はこちら | 次の問題はこちら>>
オススメ!!→ java 8 の問題はこちら オススメ!!→ javaのプログラム作成形式の練習問題はこちら オススメ!!→ Macで日本語化済のEclipseを導入する方法その1 その2 オススメ!!→ java関連の記事はこちら