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

Print Friendly, PDF & Email

ここでは、当社の新人研修受講者に向けて、基本情報のJavaの過去問を掲載しています。

想定しているのは、NetBeansなどのIDEにコピー・ペーストしたうえで、自分の正しいと思う答えを埋めて動作を確認するという使い方です。


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

〔プログラムの説明〕

 任意のオブジェクトを格納し,取り出すプログラムである。 格納されたオブジェクトを取り出す方法として,先入れ先出し法( First-In-First-Out ) 及び後入れ先出し法( Last-In-First-Out )がある。

(1) 抽象クラス Store は,メソッド put,get,size を定義する。

public void put(Object value)

 引数で指定した value を Store のインスタンスに先着順に格納する。 格納できるオブジェクトの個数の上限は 50 である。 それを超えて格納しようとしたときは DataStoreException を投げる。

public abstract Object get()

 格納されているオブジェクトを一つ取り出して返す。 どのオブジェクトを取り出すかは,このメソッドを実装するサブクラスによって決まる。 オブジェクトがないときは DataStoreException を投げる。

public int size()

 格納されているオブジェクトの個数を返す。 オブジェクトが格納されていないときは 0 を返す。

(2) クラス FifoStore は,抽象クラス Store のサブクラスで, メソッド get は格納されているオブジェクトのうち最初に格納されたものを取り出して返す。 すなわち,先入れ先出しとなる。

(3) クラス LifoStore は,抽象クラス Store のサブクラスで, メソッド get は格納されているオブジェクトのうち最後に格納されたものを取り出して返す。 すなわち,後入れ先出しとなる。

(4) クラス StoreTest は二つのサブクラスをテストするプログラムである。 プログラム起動時に指定された引数を FifoStore 及び LifoStore に格納し,取り出す操作をする。 実行例を図に示す。 ただし,図中の % はシステムのコマンドプロンプトを表し, コマンドの引数は String の配列としてメソッド main に渡されるものとする。

% java StoreTest 起 承 転 結
0: 起 1: 承 2: 転 3: 結 
0: 結 1: 転 2: 承 3: 起 

図 クラス StoreTest の実行例

[プログラム1]※

public abstract class Store {
   Object[] data = new Object[50];
   int index = 0;
   public void put(Object value) {
      if (/*  a  */)
         throw new DataStoreException("overflow");
      data[index++] = value;
   }
   public abstract Object get();
   public int size() {
      return /*  b  */;
   }
}

[プログラム2

public class FifoStore extends Store {
   public Object get() {
      if (index == 0)
         throw new DataStoreException("not exist");
      Object value = data[0];
      for (/*  c  */)
         data[i] = data[i + 1];
      data[--index] = null;
      return value;
   }
}

[プログラム3

public class LifoStore extends Store {
   public Object get() {
      if (index == 0)
         throw new DataStoreException("not exist");
      Object value = data[--index];
      data[index] = null; 
      return value;
   }
}

[プログラム4

public class StoreTest {
   public static void main(String[] args) {
      FifoStore fifo = new FifoStore();
      LifoStore lifo = new LifoStore();
      for (int i = 0; i < args.length; i++) {
         fifo.put(args[i]);
         lifo.put(args[i]);
      }
      printData(fifo);
      printData(lifo);
   }
   private static void printData(/*  d  */ store) {
      int size = store.size();
      for (int i = 0; i < size; i++)
         System.out.print(i + ": " + store.get() + " ");
      System.out.println();
   }
}

[プログラム5

public class DataStoreException extends RuntimeException {
   public DataStoreException(String message) {
      super(message);
   }
}

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

a に関する解答群

ア index < data.length    イ index <= data.length

ウ index > data.length    エ index >= data.length

オ index + 1 >= data.length 

b に関する解答群

ア data.length        イ data.length - 1

ウ data.length - index    エ index

オ index + 1

c に関する解答群

ア int i = 0; i < index; i++

イ int i = 0; i < index - 1; i++

ウ int i = 0; i < index - 2; i++

エ int i = 1; i < index; i++

オ int i = 1; i < index - 1; i++

d に関する解答群

ア FifoStore  イ LifoStore    ウ Object

エ Store    オ StoreTest