基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成20年 秋期 基本情報技術者 午後 問08
問08   Java

 次の Java プログラムの説明及びプログラムを読んで,設問1,2に答えよ。

(Java プログラムで使用する API の説明は,この冊子の末尾を参照してください。)

〔プログラムの説明〕

 クラス PhoneBook は電話帳を表すクラスである。一つの名前に複数の電話番号を 対応付けることができる。

 PhoneBook のメソッドは,次のとおりである。ここで,引数 name は名前, phoneNumber は電話番号を表す。

    void add(String name, String phoneNumber)

 電話帳に名前と電話番号を登録する。このメソッドを複数回呼ぶことによって, 一つの名前に複数の電話番号を対応付けることができる。

 引数のいずれか又は両方が null のときは, NullPointerException を投げる。 また,電話番号は,数字と"#" だけからなる1文字以上の文字列とし, 誤りがある場合には IllegalArgumentException を投げる。

    Set<String> get(String name)

 引数に指定した名前に対応付けられたすべての電話番号の集合を返す。

    void remove(String name)

 引数に指定した名前とそれに対応付けられているすべての電話番号を削除する。

    void remove(String name, String phoneNumber)

引数に指定した名前に対応付けられている指定した電話番号を削除する。

クラス PhoneBookTester はテスト用のプログラムである。実行結果を図1に示す。

Scott
   031234567#001   

 図1 実行結果

〔プログラム1〕
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
import java.util.HashMap;

public class PhoneBook {
  Map<String, Set<String>> book =
                           new HashMap<String, Set<String>>();
  public void add(String name, String phoneNumber) {
     if (name == null || phoneNumber == null) {
        throw new NullPointerException();
     }
     // 数字と "#" だけからなる1文字以上の文字列でなければ例外を投げる。
     if (!phoneNumber.matches("^[0-9#]+$")) {
        throw new IllegalArgumentException();
     }
     Set<String> numbers = book.get(name);
     if (numbers == null) {
        numbers = new HashSet<String>();
     }
     numbers.;
     book.;
   }

   public Set<String> get(String name) {
      // 指定した名前に対応付けられたすべての電話番号の集合を返す。
      Set<String> numbers = book.get(name);
      Set<String> set = new HashSet<String>();
      if (numbers != null) {
         set.addAll(numbers);
      }
      return set;
   }

   public void remove(String name) {
      book.remove(name);
   }

   public void remove(String name, String phoneNumber) {
      Set<String> numbers = book.get(name);
      if (numbers != null) {
         numbers.;
         // 対応付けられた電話番号がなくなれば,電話帳から名前を削除する。
         if (numbers.isEmpty()) {
            book.remove(name);
         }
      }
   }
}

〔プログラム2〕

public class PhoneBookTester {
   public static void main(String[] args) {
      PhoneBook pb = new PhoneBook();
      pb.add("Scott", "0809876543");
      pb.add("Bill", "0909988776");
      pb.add("James", "0909090909");
      pb.add("Scott", "031234567#001");
      pb.remove("Scott", "0809876543");
      System.out.println("Scott");
      for (String num : pb.get("Scott")) {
         System.out.println("  " + num);
      }
   }
}
設問1 プログラム中の に入れる正しい答えを, 解答群の中から選べ。

解答群

ア add(name)        イ add(phoneNumber)

ウ put(name, numbers)    ウ put(name, phoneNumber)

オ put(numbers, name)    力 put(phoneNumber, name)

キ remove(name)       ク remove(phoneNumber)

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

基本情報技術者試験


設問2 クラス PhoneBook に図2のメソッドを追加し,機能を拡張した。このメソッドに 関する記述として正しい答えを,解答群の中から選べ。

public Set<String> methodX(String var) {
   Set<String> ret = new HashSet<String>();     
   for (String key : book.keySet()) {
      if (key.startsWith(var)) {
         ret.add(key);
      }
   }
   return ret;
}

      図2 クラス PhoneBook に追加したメソッド

解答群

ア 電話帳に登録されている電話番号のうち,引数 var で与えられた文字列で始まるすべての 電話番号の集合を返す。

イ 電話帳に登録されている名前のうち,引数 var で与えられた文字列で始まるすべての名前の集合を返す。

ウ 引数 var で与えられた文字列で始まる電話番号に対応付けられたすべての名前の集合を返す。

エ 引数 var で与えられた文字列で始まる名前に対応付けられたすべての電話番号の集合を返す。 

解答 ←クリックすると正解が表示されます

[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]