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() イ以外は、'='の文字が設定されないので誤り。 |
匿名様 ご投稿
メニューへ戻る