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

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

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

〔プログラムの説明〕

 プログラムは,バイナリデータのバイト列をあるアルゴリズムに従って変換し, その結果を文字の列として取得するためのクラス Encoder とそのテスト用クラスからなる。 変換アルゴリズムは次のとおりである。

(1) バイト列の先頭から順に6ビットずつ取り出し,変換表の対応する文字に変換する。 ただし,バイト数が3の倍数でないときは,ビット数が6の倍数になるように, 最後に 4ビット又は2ビットの 0 があるものとする。

(2) 変換後の文字数が,与えられたバイト数の 4/3 倍以上で最も 小さい 4の倍数になるように,文字の列の最後に必要な個数だけ“=”を付加する。

(3) 変換例を図1 に示す。


  図1 変換例

(4) クラス Encoder は,next と hasNext の二つのメソッドをもつ。 next は,変換アルゴリズムに従って変換された文字を1文字ずつ順に返すメソッドである。 返すべき文字がなくなった後に呼ばれると,。

java.util.NoSuchElementException を投げる。 hasNext は,次の next 呼出しの際に,例外が発生せずに文字を返すことが できるとき真となる。

(5) 変数 CHARS は,6ビットの数値を1文字に変換するための表で, 配列の大きさは 64 である。 変数 n は,次に next が呼ばれたときに返すべき文字が何番目の文字で あるかを保持する(先頭の文字は 0 番目とする)。 変数 bin は,変換するバイナリデータの列を保持する。

(6) 図1 のバイト列を用いたテスト用クラス EncoderTest の実行結果を図2 に示す。

EjRFZw==       

図2 実行結果

〔プログラム〕

public class Encoder {
   static final char[] CHARS = ("ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
   "abcdefghijklmnopqrstuvwxyz0123456789+/").toCharArray();
   private int n = 0;
   private byte[] bin;
   public Encoder(byte[] bin) {
      if (bin == null) this.bin = new byte[0];
      else this.bin = bin;
   }
   public boolean hasNext() {
      return n < ;
   }
   public char next() {
      char letter;
      int pos = (int)(n * 0.75);
      // 変換対象の6ビットのデータが含まれる2バイトのデータを取得
      if (pos < bin.length) {
         int cell = bin[pos++] << 8;
         if (pos < bin.length) cell += bin[pos] & 255;
         // 変換すべき6ビットを抽出し, 対応する1文字に変換
         letter = CHARS[(cell >> (n + 3) % 4 * 2 + 4) & 63];
      } else {
         if ()
            throw new java.util.NoSuchElementException();
         else letter = ;
      }
      n++;
      return letter;
   }
}
class EncoderTest {
   public static void main(String[] args) {
      byte[] bin = {0x12, 0x34, 0x45, 0x67};
      Encoder encoder = new Encoder(bin);
      while (encoder.hasNext()) {
         System.out.print(encoder.next());
      }
      System.out.println();
   }
}

基本情報技術者試験


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

a に関する解答群

ア (bin.length + 2) * 4 / 3    イ (bin.length + 2) / 3 * 4

ウ bin.length * 4 / 3       エ bin.length / 3 * 4

b に関する解答群

ア !hasNext()       イ hasNext()

ウ n < bin.length    エ n >= bin.length()

c に関する解答群

ア ''     イ '='

ウ CHARS[n]     エ next()

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

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

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


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