平成15年 秋期 基本情報技術者 午後 問08
問08 Java次の Java プログラムの説明及びプログラムを読んで,設問に答えよ。 〔プログラムの説明〕 プログラムは,バイナリデータのバイト列をあるアルゴリズムに従って変換し, その結果を文字の列として取得するためのクラス Encoder とそのテスト用クラスからなる。 変換アルゴリズムは次のとおりである。 (1) バイト列の先頭から順に6ビットずつ取り出し,変換表の対応する文字に変換する。 ただし,バイト数が3の倍数でないときは,ビット数が6の倍数になるように, 最後に 4ビット又は2ビットの 0 があるものとする。 (2) 変換後の文字数が,与えられたバイト数の 4/3 倍以上で最も 小さい 4の倍数になるように,文字の列の最後に必要な個数だけ“=”を付加する。 (3) 変換例を図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 に示す。
図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()
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |