ここでは、当社の新人研修受講者に向けて、基本情報のJavaの過去問を掲載しています。

想定しているのは、NetBeansなどのIDEにコピー・ペーストしたうえで、自分の正しいと思う答えを埋めて動作を確認するという使い方です。


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

〔プログラムの説明〕

 整数値の加減乗除の演算をする電卓のプログラムである。この電卓は,数字キー, 加減乗除の各演算キー,イコールキー及びクリアキーをもつ。プログラムは,キーが 押されたとき,それぞれのキーに対応する処理を実行する。数値などの表示は,System.out.println を呼び出して行う。

(1) インタフェース Key は,電卓のキーが押されたときの処理を実行するメソッドを定義する。

 メソッド operateOn は,引数で与えられたクラス java.util.Stack のインスタンス (以下,スタックという)に対して,キーに対応する処理を実行する。

(2) 列挙 DigitKey は,数字キーを表す定数 DIGITØ ~ DIGIT9 を定義する。

 メソッド operateOn は,キーを 10 進数の入力として処理する。引数で与えられたスタックの 先頭に格納されている値は 0(初期値)又は入力中の数値であり,その値を更新する。

(3) 列挙 OperationKey は,加減乗除の各演算キー,イコールキー及びクリアキーを 表す定数 ADD,SUBTRACT,MULTIPLY,DIVIDE,EQUAL 及 びCLEAR を定義する。

 メソッド operateOn は,加減乗除の各演算キーに対応する演算を, スタックの内容に対して実行する。

(4) クラス Calculator は,電卓本体を表す。フイールド stack は,電卓内部の数値の 状態を表すスタックを保持する。フィールド pendingKey は,演算に必要な数値の 入力が終わるまで演算キーを保持する。また,イコールキーが押されたときは, イコールキーを保持する。例えば,キーの定数 DIGIT2,ADD,DIGIT4 が順に処理されたとき, スタックに格納されている値は先頭から 4,2 であり,pendingKey の値は ADD である。 次にキーの定数 EQUAL が処理されたとき,演算キー ADD の加算処理が実行され,スタックに格納されている値は 6 となり,pendingKey の値は EQUALとなる。 ここで,二つの数値に対する加減乗除の演算結果は,Java の int 型の演算結果に一致するものとする。

 メソッド onKeyPressed は,電卓のキーが押されたときに呼び出される。押されたキーは, 引数で与えられる。押されたキー及び電卓の内部状態に基づいて,処理を実行する。

(5) クラス CalculatorTest は,クラス Calculator をテストするプログラムである。 メソッド main は,まず,文字と電卓の各キーとの対応を作成し, クラス Calculator のインスタンスを生成する。次に,引数で与えられた文字列の各文字を キーの定数に変換し,そのキーの定数を引数としてクラス Calculator のインスタンスの メソッド onKeyPressed を呼び出す。例えば,メソッド main の引数として 文字列“2*3=”が与えられたとき,それぞれの文字を,キーの定数 DIGIT2, MULTIPLY,DIGIT3,EQUAL に変換し,逐次それぞれのキーの定数を 引数としてメソッド onKeyPressed を呼び出す。メソッド main を実行したときの出力を 図1に示す。

DICIT2
2
MULTIPLY
2
DIGIT3
3
EQUAL
6

図1 メソッド main を実行したときの出力

[プログラム1]

[プログラム2]

[プログラム3]

[プログラム4]

[プログラム5]

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

a に関する解答群
ア extends      イ implements     ウ imports
エ inherits      オ requires       カ throws

b,c に関する解答群
ア ordinal()       イ stack.peek()       ウ stack. pop()
エ stack.push(Ø)     オ stack.push(ordinai())   カ values()

d に関する解答群
ア DigitKey       イ Key       ウ stack.pop()
エ this             オ val1       カ val2

e に関する解答群
ア Calculator      イ Character     ウ DigitKey
エ Integer       オ Key       カ OperationKey

設問2  表1は,文字列を引数としてメソッド main を実行したときの出力の最後の行(図1の場合は 6 )を表している。 表中の/*  */ に入れる正しい答えを,解答群の中から選べ。 ここで,プログラム中の/*  */ には,全て正しい答えが入っているものとする。

表1

f,g に関する解答群
ア 0       イ 2                ウ 4
エ 8       オ 16               カ 32
キ 64      ク ArithmeticException       ケ Error