2016年12月2日金曜日

[平成28年度春] 午後 問11 解説

[問題文・解答]


平成28年度4月に実施された基本情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)

[問題概要]


この問題は、選択問題で問9〜問13のうち1問を選択する必要があります。
出題分野はソフトウェア開発(Java)で、問題の題材は"すべきこと"の管理です。
Javaで実装されたToDoリストの管理プログラムについて問われます。Javaの文法についての知識がある程度必要とされる問題です。


[設問1]


a) メソッドequalsでは、引数で指定されたオブジェクトがToDoクラスのインスタンスであり、自身と同一であるかどうかを判定するメソッドです。
o of instance ToDoの部分で引数がToDoクラスであることを判定しているため、aの部分では自身と一致するかどうかを判定するために引数のフィールドidと自身のidを比較します。ここで、引数のオブジェクトがToDoクラスでなくフィールドidを持たない場合にエラーとならないように引数オブジェクトをToDoクラスにキャストしておく必要があるため、「ア」が正解となります。

b) ToDoListクラスのメソッドaddでは、引数で指定されたToDoが既にリスト中にあるかどうかを判定し、リストに無い場合はリストに追加、既にある場合は何もせずに終了します。bの部分は引数のToDoが既にリストにあるかどうかを判定し、結果が真ならばリストに追加しています。つまり、bではリストに無い場合に真を返す判定文が入ります。
ここで、P.68のAPIよりメソッドcontainsは引数の要素がリストにあればtrue、それ以外はfalseを返すため、「ア」の!todoList.contains(todo)が正解となります。

c) ToDoListクラスのメソッドupdateでは、引数で指定されたToDoが既にリスト中にあるかどうかを判定し、リストにある場合は対象のToDoを更新し、無い場合は何もせずに終了します。1行目でindexOfを使って、引数のToDoのリスト中のindexを求めています。P.68のAPIよりindexOfは指定された要素がリストに無ければ-1を返すため、cの部分ではindexの値が-1かどうかを判定し、-1でないならばリスト中のToDoを更新しています。従って、「ア」の!= -1が適切です。

d) ToDoListクラスのメソッドselectでは、まず空のToDoListオブジェクトresultを作成し、現在のtodoList中の各要素に対して引数で指定された条件を順に判定していき、全ての条件に合致するToDo要素のみをresultに追加していきます。
dの部分では条件合致のフラグに用いるboolean型のselectedを初期化します。その後、引数の条件に対する判定結果をselectedに代入し、falseの場合はfor文を抜けて何もせずに次のToDo要素に移ります。全ての条件に対してtrueとなった場合はそのToDoをresultに追加して次のToDo要素に移ります。
ここで注意すべきは、P.50下段にあるように引数に条件指定しないときは、保持する全てのToDoリストから成るリストを返す点です。つまり、selectedはtrueで初期化する必要があるため、正解は「イ」となります。

e) P.50下段よりインタフェースConditionのメソッドtestは条件に合致する時にtrueを返すため、その返り値をそのままselectedに代入すればよいため、「イ」が正解です。

[答] a) ア b) ア c) ア d) イ e) イ

[設問2]

プログラム4では6つのToDoを追加し、そのうち2つの条件condition1とcondition2に合致するToDoのリストを求めて出力しています。
2つの条件の内容は以下の通りです。
・condition1: 重要度がHIGHである
・condition2: 期限が20160501より前である
追加された6つのToDoの内、上記の2条件に合致するのが以下の2つです。
①主題:メール送信、期限:201604181500、優先度:HIGH
②主題:報告書作成、期限:20160428、優先度:HIGH
表示順序はリスト中の順序つまりリストに追加された順序と一致するため、fには①、gには②が当てはまります。

[答] f) カ g) エ

上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。


0 件のコメント:

コメントを投稿