平成17年 春期 基本情報技術者 午後 問12
問12 Java次の Java プログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕 整数値の加減乗除の演算をする電卓プログラムである。 入出力部分はテスト用のプログラムによって用意され,電卓本体部分のプログラムの テストができるようになっている。 (1) クラス CalculatorEvent は電卓のキーが押されたときに発生するイベントである。 イベントにはタイプがありフィールド type の値で表される。 タイプは DIGIT,OPERATOR,CLEAR のいずれかであり,それぞれ電卓の数字キー(0〜9), 演算キー(+ など)及びイコールキー(=),クリアキー(C)を表す。 タイプが DIGIT のときは数字キーに対応する数値を,OPERATOR のときは演算の種類を 表す文字又は '=' をフィールド value に保持する。 タイプが CLEAR のときは,value は使用しない。 (2) インタフェース CalculatorOutput は,電卓上に数値やエラーを 表示するメソッド display を宣言する。 (3) クラス Calculator は電卓本体である。 メソッド eventDispatched はイベントを受け取り,イベントのタイプに応じて演算処理などを行う。 なお,二つの数値に対する加減乗除の演算結果は Java の int 型の演算結果に一致するものとする。 (4) クラス CalculatorTest は Calculator をテストするプログラムである。
例えば,文字列“2+7=”は,電卓キー 2,+,7,= が順に押されたことを表し, この文字列が引数 args[0] としてメソッド main に渡されたとき,プログラムは次のとおり出力する。
〔プログラム 1〕
public class CalculatorEvent {
public static final int DIGIT = 1;
public static final int OPERATOR = 2;
public static final int CLEAR = 3;
private int type, value;
public CalculatorEvent(int type) {
〔プログラム 2〕
public interface CalculatorOutput {
public void display(int value);
public void display(String value);
}
〔プログラム 3〕
public class Calculator {
private int accumulator = 0, register = 0;
private int operator = 0;
private CalculatorOutput output;
public Calculator(CalculatorOutput output) {
this.output = output;
}
public void eventDispatched(CalculatorEvent event) {
switch (event.getType()) {
case CalculatorEvent.DIGIT:
if (operator == '=') {
register = 0; operator = 0;
}
register = register * 10 + event.getValue();
output.display(register);
break;
case CalculatorEvent.OPERATOR:
try {
register = calculate();
output.display(register);
accumulator = register;
operator = event.getValue();
} catch (ArithmeticException e) {
output.display("Error");
accumulator = 0; operator = 0;
}
if (operator != '=')
register = 0;
break;
case CalculatorEvent.CLEAR:
register = 0;
accumulator = 0;
operator = 0;
output.display(register);
break;
}
}
private int calculate() {
switch (operator) {
case '+':
return accumulator + register;
case '-':
return accumulator - register;
case '*':
return accumulator * register;
case '/':
return accumulator / register;
}
return register;
}
}
〔プログラム 4〕
public class CalculatorTest {
public static void main(String[] args) {
Calculator calc = new Calculator(
設問1 プログラム中の
a に関する解答群 ア CalculatorEvent(type, 0) イ new CalculatorEvent(type, 0) ウ return new CalculatorEvent(type, 0) エ super(type, 0) オ this(type, 0) b に関する解答群 ア implements CalculatorOutput() イ interface CalculatorOutput() ウ new CalculatorOutput() エ new Temp() implements CalculatorOutput オ public class Temp implements CalculatorOutput c に関する解答群 ア c - '0', CalculatorEvent.DIGIT イ c, CalculatorEvent.DIGIT ウ CalculatorEvent.DIGIT エ CalculatorEvent.DIGIT, c オ CalculatorEvent.DIGIT, c - '0'
設問2 次の表は文字列を引数としてメソッド main を実行したときに,
最後に出力された結果を表している。
表中の
解答群 ア 0 イ 3 ウ 4 エ 5 オ 7 カ 12 キ 17 ク 53 ケ / by zero コ Error
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2025 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||||||||||||||||||||||||||
