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

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

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

〔プログラムの説明〕

 キーとそのキーに関連付けられた値をある形式に従って出力するプログラムである。

 プログラム1−1は,与えられた二つの文字列をキー及びそのキーに関連付けられた 値として"キー=値"の形式(以下,プロパティ形式という)で出力する。クラス ToProperties のメソッド write の引数 key はキー,引数 value は値である。 キー及び値は英数字からなる文字列である。

 プログラム1−2は,クラス ToProperties のテストプログラムである。メソッド main を実行すると,図1に示す結果が得られる。

 color=red
 font=serif

図1 プログラム1−2のメソッド main の実行結果

 このプロパティ形式に加えて,"<"と">"で囲まれたタグを使用する形式 (以下,タグ形式という)で出力できるようにする。 タグ形式では,キーと値の組を図2に示す形式で表し,その組をエントリという。

 <entry key="キー">値</entry>

図2 タグ形式におけるエントリ

 エントリの並びを,タグ<data> 及び </data> で囲んで出力する。

 これを実現するために,次のプログラムを新たに作成し,プログラム1−1に変更を 加えた。

(1) プログラム2−1は,プロパティ形式とタグ形式の出力を 統一して扱うインタフェース KeyValueWriter を定義する。 メソッド initialize は,必要な前処理を行い, メソッド write は,引数で与えられたキーと値を出力し,メソッド complete は, 後処理を行う。出力形式は,これらのメソッドの実装で決まる。

(2) プログラム2−2は,インタフェース KeyValueWriter を 実装するクラス ToTags である。

(3) プログラム2−3は,インタフェース KeyValueWriter で定義されている 全メソッドの省略時の実装を与えるクラス KeyValueWriterAdapter である。各メソッドの 実装は,必ず空である。

(4) プログラム2−4は,プログラム1−1をクラス KeyValueWriterAdapter に適用 できるように変更したものである。

(5) プログラム2−5は,変更されたクラス ToProperties 及びクラス ToTags の出力 を検査するテストプログラムである。

 全プログラムの変更後,プログラム2−5のメソッド main を実行すると,図3に示す 実行結果が得られる。

width=200
height=120
color=blue
----------------
<data>
<entry key="width>200</entry>
<enlry key="height">120</entry>
<entry key="color">blue</entry>
</data>

図3 プログラム2−5のメソッド main の実行結果(全プログラムの変更後)

〔プログラム1−1〕

public class ToProperties {
   public void write(String key, String value) {
      System.out.println(key + "=" + value);
   }
}

〔プログラム1−2〕

public class Test1 {
   public static void main(String[] args) {
      ToProperties writer = new ToProperties();
      writer.write("color", "red");
      writer.write("font", "serif"),
   }
}

〔プログラム2−1〕

public interface KeyValueWriter {
   public void initialize();
   public void write(  );
   public void complete();
}

〔プログラム2−2〕

public class ToTags implements KeyValueWriter {
   public void initialize() {
      System.out.println("<data>");
   }
   public void write(String key, String value) {
      System.out.println("<entry key=\"" + key + "\">"
                         + value + "</entry>");
   }
   public void write(String key, String value) {
      System.out.println("</data>");
   }
}

〔プログラム2−3〕 

public class KeyValueWriterAdapter
                              implements KeyValueWriter {
   public void initialize() { }
   public void write(  ) { } 
   public void complete() { }
}

〔プログラム2−4〕 

public  
   public void write(String key, String valte) {
      system.out.println(key + "=" + value);
   }
}

〔プログラム2−5〕 

public class Test2 {
   static String[][] pairs = { {"width", "200"},
                               {"height","120"},
                               {"color","blue"} };
   public static void main(String[] args) {
      write(new ToProperties());
      System.out.println("---------------");
      write(new ToTags());
   }
   private static void write(  out) {
      out.initialize();
      for (String[] pair : pairs) {
         out.write(   );
      }
      out.complete();
   }
}

設問1 プログラム中の に入れる正しい答えを, 解答群の中から選べ。

a に関する解答群

ア K key, V value          イ Object key, Object value

ウ String key, String value     エ String[] key, String[] Value

b に関する解答群

ア abstract class ToProperties extends KeyValueWriterAdapter

イ class ToProperties extends KeyValueWriterAdapter

ウ class ToProperties extends ToTags

エ class ToProperties implements KeyValueWriter

オ class ToProperties implements ToTags

c に関する解答群

ア KeyValueWriter      イ KeyValueWriterAdapter

ウ Test2          エ ToProperties

オ ToTags

d に関する解答群

ア pair[0], pair[1]       イ pair[1], pair[0]

ウ pair[i], pair[i + 1]     エ pairs[][0], pairs[][1]

オ pairs[][1], pairs[][0]

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

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

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

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

基本情報技術者試験


設問2 プログラムを更に拡張して,与えられた文字列をコメントとして出力できるよ うにする。すなわち,プロパティ形式では与えられた文字列の先頭に "#" を 付加して出力し,タグ形式では与えられた文字列を "<!-- " 及び " -->" で 囲んで出力する。例えば,与えられた文字列が "This is a comment." のとき, プロパティ形式では図4のとおりに,タグ形式では図5のとおりに出力する。 ただし,コメントとして与えられた文字列は,改行文字及び文字列 "--" を 含まないものとする。

 # This is a comment.

図4 プロパティ形式でのコメントの出力例

 <-- This is a comment. -->

図5 タグ形式でのコメントの出力例

 この拡張のために,次の表に示す各コードをプログラムに追加した。各コード の追加先のプログラムとして,表中の に 入れる正しい答えを,解答群の中から選べ。

    表 コードの追加先と追加内容

 追加先 追加内容
  public void writeComment(String comment) {
  System.out.println("# " + comment);
}
  public void writeComment(String comment) {
  System.out.println("<!-- " + comment + " -->);
}
  public void writeComment(String comment);
  public void writeComment(String comment) { }

解答群

ア プログラム2−1    イ プログラム2−2

ウ プログラム2−3     エ プログラム2−4

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

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

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

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


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