基本情報技術者過去問

平成17年 午後 問8

最終更新日 2005/12/25
webmaster@tomnetwork.net

Tomのネットワーク勉強ノート
 過去問
  基本情報技術者過去問(午前・午後)
   基本情報技術者過去問 平成17年 午後 問8

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

〔プログラムの説明〕

英文のテキストを処理し,単語の出現回数を数えるプログラムの一部である。テキ
ストは,単語,空白,コンマ及びピリオドで構成され,単語はアルファベットだけで
構成される。単語中の大文字はすべて小文字に変換して取り扱う。さらに,単語の出
現回数だけでなく,アルファベットの各文字が単語の先頭に現れた回数を数えられる
ようにする。

(1)WordTableは,与えられた文字列から単語を切り出し,出現回数を数えるクラ
  スである。実際に単語を数える処理は,コンストラクタで指定する別のオブジェク
  トで行う。
(2)Counterは,単語を数える処理のインタフェースである。
(3)WordCounterは,単語の出現回数を数えるクラスである。
(4)FirstLetterCounterは,アルファベットの各文字が単語の先頭に現れた回
  数を数えるクラスである。
(5)Testは,テスト用のメインプログラムである。実行例を図に示す。

   _
wordcountTable:
java(2)
hello(1)
wonderful(1)
world(1)
is(1)

firstLetterCountTable:
h(1)
i(1)
j(2)
w(2)

図 クラスTestの実行例

 java.util.stringTokenizerは,指定された区切り文字で,文字列を字句
単位(トークン)に分解するクラスである。次のメソッドをもつ。

    public boolean hasMoreTokens()
      文字列に利用できるトークンがまだあるかどうかを判定し,結果を返す。

    public String nextToken()
      次のトークンを返す。

 java.util.Mapは,キーと値を関連付けて管理するインタフェースであり,
java.util.HashMapは,そのインタフェースを実装したクラスである。キーを
指定して,そのキーに値を関連付けたり,そのキーに関連付けられた値を取り出し
たりすることができる。次のメソッドをもつ。

    public object get (object key)
      keyに関連付けられた値を返す。

    public object put (object key, object value)
      keyにvalueを関連付ける。

    public boolean containsKey (object key)
      keyに関連付けられた値がある場合にtrueを返す。

    public set keyset()
      マップに含まれるキーの集合を返す。

 java.util.Iteratorは,要素を順番に取り出すための操作を提供するイン
タフェースである。次のメソッドをもつ。

    public boolean hasNext()
      次の要素がある場合にtrueを返す。

    public object next()
      次の要素を返す。 

〔プログラム1〕

import java.util.StringTokenizer;

public class WordTable {
  private 【  a  】counter;
  public WorldTable(【  a  】 counter ) {
    this counter = counter;
  }
  public void put (String line) {
    StringTokenizer st = new StringTokenizer(line, ”,.”);
    while (st,hasMoreTokens())
      counter,put(st.nextToken().toLowerCase());
  }
  public String toString() {
    return counter..toStrttng();
  }
}

〔プログラム2〕

public interfate Counter {
  void put (String str);
}

〔プログラム3〕

import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;

public class WordCounter 【  b  】{
  private Map freq = new HashMap();
  public void put (String str) {
    int count =【  c  】;
    if (freq.containsKey (str))
      count += ((Integer) freq.get(str)).intValue();
    freq.put(str, new Integer(count));
  }
  public String toString(){
    stringBuffer buf = new StringBuffer();
    for (Iterator it = freq.keyset().iterator();
        it.hasNext(), ){
      String word = (string) it.next();
      buf.append(word + ”(” + freq.get(word) + ")\n" );
    }
    return buf,toString(),
  }

〔プログラム4〕

public class FirstLetterCounter 【  b  】{
  private int[] flFreq = new int[26];
  public void put(String str) {
    【  d  】++;
  }
  public String toString()(
    StringBuffer buf = new stringBuffer();
    for (int i = 0 ; i < flFreq.length, i++) {
      if (flFreq[ i ]  != 0)
        buf.append((char) ( ' a ' + i)
               + " ( " + flFreq[i] + ")\n");
    }
    return buf.toString();
  }

〔プログラム5 〕

public class Test {
  public static void main (string[].args) {
    String text = 'Hello java world. Java is wonderful.";
    WordTable wordCountTable =
        new WordTable( new WordCounter());
    WordTable firstLetterCountTable =
        new WordTable (new FirstLettercounter());
    wordcountTable.put(text);
    firstLettercountTable.put(text);
    System.out.println("wordcountTable:\n" +
                       wordcountTable);
    System.out.println("firstLetterCountTable:\n" +
                       firstLetterCountTable),;
  }


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

  aに関する解答群
    ア Counter         イ FirstLetterCounter
    ウ Object          エ WordCounter
    オ WordTable

  bに関する解答群
    ア extends counter    イ extends object
    ウ extends wordTable   エ implements counter
    オ implements Object   力 implements WordTable

  cに関する解答群
    ア -1
    イ 0
    ウ 1
    エ ((Integer) freq.get(str)).intValue()
    オ str.length()

  dに関する解答群
    ア flFreq['a' + str.charAt(0)]
    イ flFreq['a' + Str.charAt(1)]
    ウ flFreq[str.charAt(0)]
    エ flFreq[str.charAt(1)]
    オ flFreq[str.charAt(0) - 'a']
    カ flFreq[str.charAt(1) - 'a']

Tomのネットワーク勉強ノート
 過去問
  基本情報技術者過去問(午前・午後)
   基本情報技術者過去問 平成17年 午後 問8