pafuイーランスクール 学んでできる

メニューへ戻る

Java 基礎問題7 平成15年度秋期問8 解説

問題の確認

解説
a:
hasNext は,次の next 呼出しの際に,例外が発生せずに文字を返すことができるとき真となる。
> public boolean hasNext() {
> return n < [a];
> }
nの初期値は0で、next()メソッドを実行するたびにn++;でインクリメントされる。
aにはnext()メソッドで返すことのできる文字数が入る。
変換前に3byteのデータを4文字に変換する。

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

結果は4の倍数であるため最後に*4をしていないア、ウではない。
エでは、1byteのデータなど3byteの倍数でない場合に、
切り上げの処理がなく、切り捨てられるため計算が合わない。
イで+2した物を3で割ることにより、
3で割った余りの部分で使用する文字数を切り上げている。
元のデータ長 変換後の文字数
3の倍数 :( 3n +2)/3 *4= n *4
3の倍数+1:((3n+1)+2)/3 *4=(n+1)*4
3の倍数+2:((3n+2)+2)/3 *4=(n+1)*4

b:
ifに該当した場合に行う処理が、
例外java.util.NoSuchElementExceptionをスローする処理である。
問題文より、
>「next は,変換アルゴリズムに従って変換された文字を 1 文字ずつ順に返すメソッドである。
>返すべき文字がなくなった後に呼ばれると,java.util.NoSuchElementException を投げる。」
なので、hasNext()メソッドの戻り値がfalseになることで、
返すべき文字がなくなったことが判定できるため、
if文がtrueの場合に例外をスローするためには
ア !hasNext()
が正解である。

他の選択肢については、
イ hasNext()
->条件が逆。
ウ n < bin.length
->条件に合わない。
エ n >= bin.length()
->同上。

c:
next内の処理を考えると、
>int pos = (int)(n * 0.75);
>if (pos < bin.length) {
> ※(元データの存在する範囲なら、変換後のデータをletterに設定)
>} else {
> if (!hasNext())
> throw new java.util.NoSuchElementException();
> else letter = [c];
>}
である。
cで行う処理は、元データが存在しない範囲の、変換後の文字数が
4の倍数となるように付加する“=”を設定することであると考えられる。
>イ '='
が正解となる。

>ア ''
>ウ CHARS[n]
>エ next()
イ以外は、'='の文字が設定されないので誤り。

匿名様 ご投稿

メニューへ戻る

pafuイーランスクール

pafuイーランスクール 学んでできる