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

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

〔プログラムの説明〕

インタフェース CharIterator は,データ構造に依存せずに そのインスタンスから文字(char)を順番に取り出すための操作を定義する。 CharIterator には,次のメソッドが定義されている。

public char next()

次の文字があればそれを返し,なければ java.util.NoSuchElementException を投げる。例えば,この CharIterator インスタンスが文字を n 個もっているとき,最初の呼出しで 1番目の文字を返し,2 回目の呼出しで2番目の文字を返し,…というように, n 回目の呼出しまで文字を順番に返していく。 n +1回目以降の呼出しでは, NoSuchElementException を投げる。

なお,NoSuchElementException は java.lang.RuntimeException のサブクラスである。

public boolean hasNext()

次の文字があれば true を返し,なければ false を返す。

クラス CharIteratorFactory は,引数に指定したデータ型に一致した CharIterator を返すメソッドを定義する。 CharIteratorFactory には,次のクラスメソッドが定義されている。

public static CharIterator getCharIterator(String data)

引数に指定した String から文字を順番に取り出す CharIterator を返す。 引数に null が指定されたときは,NullPointerException を投げる。

public static CharIterator getCharIterator(char[][] data)

引数に指定した char を要素型とする配列の配列(2次元の文字配列) から文字を順番に取り出す CharIterator を返す。 引数に null が指定されたときは,NullPointerException を投げる。 文字を取り出す順序は,文字配列とその配列のそれぞれのインデックス値の小さい順とする。 すなわち,
char[][] 型の m に対し,その要素 m[i][j] を i の小さい順, 同じ i に対しては j の小さい順に取り出す。

クラス CharIteratorTest は,CharIteratorFactory で 定義されたメソッドをテストするためのプログラムである。 メソッド main を実行すると,図の実行結果が得られる。

〔プログラム 1〕

public interface CharIterator {
   public boolean hasNext();
   public char next();
}

〔プログラム 2〕

import java.util.NoSuchElementException;
public class CharIteratorFactory {
   public static CharIterator getCharIterator(String data) {
      if (data == null)
         throw new NullPointerException();
      // Stringデータから文字を順番に返すCharIteratorのインスタンス
      // を生成して返す。
      return ;
   }
   public static CharIterator getCharIterator(char[][] data) {
      if (data == null)
         throw new NullPointerException();
      // 2次元の文字配列から文字を順番に返すCharIteratorのインスタンス
      // を生成して返す。
      return ;
   }
}
class StringCharIterator implements CharIterator {
   private String data;
   private int index = 0;
   StringCharIterator(String data) {
      this.data = data;
   }
   // dataに次の文字があるかどうかをチェックする。
   public boolean hasNext() {
      return ;
   }
   public char next() {
      // 次の文字がないときは,NoSuchElementExceptionを投げる。
      if (index >= data.length())
         throw new NoSuchElementException();
      // dataの次の文字を返し,インデックス値を更新する。
      return ;
   }
}
class Char2DArrayCharIterator implements CharIterator {
   private char[][] data;
   private int index1 = 0, index2 = 0;
   Char2DArrayCharIterator(char[][] data) {
      this.data = data;
   }
   public boolean hasNext() {
      // data[index1][index2]の要素があればtrueを返し,なければ次
      // に定義されている要素を探す。次の要素がなければfalseを返す。
      for (; index1 < data.length; index1++) {
         if (data[index1] != null
              && index2 < data[index1].length) {
            return true;
         }
         ;
      }
      return false;
   }
   public char next() {
      // メソッドhasNextを呼び出して次の要素があるかどうかを調べ,
      // あればその要素を返し,インデックス値を更新する。なければ,
      // NoSuchElementExceptionを投げる。
      if (hasNext()) {
         return ;
      }
      throw new NoSuchElementException();
   }
}

〔プログラム 3〕

public class CharIteratorTest {
   public static void main(String[] args) {
      CharIterator itr = 
            CharIteratorFactory.getCharIterator("H16");
      printIterator(itr);
      itr = CharIteratorFactory.getCharIterator(
                new char[][] {{ '2' },
                              { '0' },
                              null,
                              { '0', '4' }});
      printIterator(itr);
   }
   private static void printIterator(CharIterator itr) {
      while (itr.hasNext()) {
         System.out.print("'" + itr.next() + "' ");
      }
      System.out.println();
   }
}

基本情報技術者試験


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

a,b に関する解答群

ア getCharIterator((char[][]) data)

イ getCharIterator((String) data)

ウ new Char2DArrayCharIterator()

エ new Char2DArrayCharIterator(data)

オ new StringCharIterator()

カ new StringCharIterator(data)

c に関する解答群

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

ウ index >= data.length()    エ index++ < data.length()

オ index++ <= data.length()   カ index++ >= data.length()

d に関する解答群

ア data.charAt(++index)    イ data.charAt(--index)

ウ data.charAt(index + 1)   エ data.charAt(index++)

オ data.charAt(index--)    カ data.charAt(index)

e に関する解答群

ア index1 = 0         イ index1 = data.length

ウ index1 = index2       エ index2 = 0

オ index2 = data.length    カ index2 = index1

f に関する解答群

ア data[index1++][index2++]    イ data[index1++][index2]

ウ data[index1][++index2]     エ data[index1][--index2]

オ data[index1][index2 + 1]    カ data[index1][index2++]

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

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

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

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

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

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


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