スゴ技

平成23年度 秋 基本情報技術者試験 【問11】(その1)

Blog:IT・情報処理BLOG |

ソフトⅡコース担当 ブログのおにーさまこと高橋です。

続きまして、平成23年度秋期基本情報技術者試験午後問11、Javaの問題の前半解説です。問題文は情報処理推進機構(IPA)のサイトで確認してください。]

今回のJavaの問題は、総称やインターフェース、インナークラス、可変個引数等が含まれています。総称に慣れていないと難しく感じるかもしれません。また、プログラム数も多いので、トレースを大変だと感じた人もいるでしょう。

空欄a
空欄aを含む行(プログラム1の4行目)は、インナークラス「Criteria」定義の最初の部分です。
public static class Criteria implements 空欄a{
インナークラス「Criteria」が実現するインターフェースが空欄aに入ります。
このインナークラスは、アウタークラス「Name」定義の最初の部分(プログラム1の1行目)で使用されています。
public class Name implements Searchable<Name.Criteria>{
ここでインターフェース「Searchable」の定義(プログラム5)を確認すると、
public interface Searchable<T extends SearchCriteria>{
public boolean meets(T criteria);
}
となっています。ここで、総称部分(<T extends SearchCriteria>)に注目します。これは、Tが右に書かれたクラスのサブクラスであるか、右に書かれたインターフェースを実現するクラスであるかを表しています。「SearchCriteria」はインターフェースなので、後者に該当します。
話をアウタークラスの定義最初の部分に戻すと、「Name.Criteria」すなわち「Name」クラスのインナークラス「Criteria」は「SearchCriteria」を実現しなければなりません。空欄aには「SearchCriteria」が入ります。解答はアとなります。
このように書くと難しく感じますが、同じ「AddressBook」のエントリである「Address」クラス(プログラム2)のインナークラス「Criteria」との比較で、「SearchCriteria」が入ることがわかります。

空欄b
meetsAnyOfメソッドは、AddressBookのエントリで、検索条件のいずれかを満たすエントリの集合を戻します。検索条件は可変個引数(meetsAnyOf(SearchCriteria… criteria))で渡されます。可変個引数は、受け手側は配列として扱います。meetsAnyOfメソッドの3行目で、拡張for文を使って配列要素を繰り返しています。2重ループにより、、すべてのエントリと検索条件の組み合わせを網羅します。次の図は、その実行順序の一例です。
ここで、エントリを格納しているHashSetには次の特徴があります。

  • 重複を許さない(1つにまとめられる)
  • 順不同である

格納順は不同の為、実際には図の順で実行されるとは限りません。
いずれかの検索条件を満たせばよいので、resultsetは最初空にしておき、条件を満たせば追加します。重複を許さないので、両方の条件を満たす技術太郎が2つ格納されることはありません。
空欄にはresultsetにエントリを追加するオの「resultset.add(entry)」が入ります。

空欄c
meetsAllOfメソッドは、AddressBookのエントリで、検索条件のすべてを満たすエントリの集合を戻します。すべてを満たす場合追加するということは、逆にいずれかを満たさなければ除くと考えることもできます。一度除いた後は、同じエントリを除くことができないので、breakで繰り返しから抜け出しています。

空欄にはresultsetからエントリを除くキの「resultset.remove(entry)」が入ります。

2011年(平成23年度)秋期の解説

Date:

神戸電子の
IT・情報処理学科
についてもっと知りたい!

Webアプリケーション等のシステム管理、設計、開発が行える総合的なITエンジニアを育成する学科です。

学科紹介を見る (神戸電子サイト)

学科紹介イメージ
Info神戸電子からのお知らせ

Tagタグ

Teamライターチーム紹介

神戸電子オフィシャルSNS

オープンキャンパスなどの
誰でも参加OKの楽しいイベント
やブログの最新記事などお届けします!

ページの上へ移動