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

メニューへ戻る

Java 応用問題4 平成17年度春期問12 解説

問題の確認

解説
設問1
a:
処理内容を見ると、CalculatorEventのコンストラクタで
引数がint typeのみのものの中での処理である。
選択肢を見ると、引数はすべて(type, 0)であるため、
選択する必要があるのは、どの様にしてtypeとvalueに
値を設定するかということについてとなる。
>オ this(type, 0)
が正解。
その他の選択肢については、
>ア CalculatorEvent(type, 0)
 ->文法的に誤り。
>イ new CalculatorEvent(type, 0)
>ウ return new CalculatorEvent(type, 0)
 ->呼び出されたコンストラクタ内で、別のインスタンスを作成しており
  thisに対しては、値が設定されないため誤り。
  ウでコンストラクタで値をreturnするのも誤り。
>エ super(type, 0)
 CalculatorEventのスーパークラスは明示的な宣言がないため
 Objectクラスであり、Objectクラスに(int, int)のコンストラクタは
 存在しないため誤り。(存在していたとしても必要な処理にならない。)

b:
CalculatorTestクラスのmainメソッドでCalculatorクラスのコンストラクタに
CalculatorOutputを実装したインスタンスを指定する処理である。
問題文中の
>CalculatorOutputを匿名クラスとして実装する。
>この実装では,メソッドdisplayは指定された数値又は文字列をSystem.outに出力する。
の部分に該当する。
>Calculator calc = new Calculator(
>  [b] {
>    public void display(int value) {
>      System.out.println(value);
>    }
>    public void display(String value) {
> System.out.println(value);
>    }
>  });
CalculatorOutputを匿名クラスとして実装するための宣言としては
>ウ new CalculatorOutput()
が正解。(匿名クラスの宣言方法については、別途テキストなどで確認のこと)

c:
cが'0'~'9'の場合に、CalculatorEventのコンストラクタに指定する引数であり、
第1引数typeにはCalculatorEvent.DIGITを指定する必要があり、
第2引数に指定する値については、
Calculator.eventDispatchedメソッドでイベントがCalculatorEvent.DIGITの場合の処理で
>register = register * 10 + event.getValue();
とあり、CalculatorEventのvalueとして設定するべき値は0~9の値である
>オ CalculatorEvent.DIGIT, c - '0'
が正解。

設問2
d:
>3*4***=
を実行したときに,最後に出力された結果
CalculatorEventでCalculatorEvent.OPERATORのイベントが
連続で発生した場合の結果となる
「3*4*」までの結果は12で特に変わった部分はない。
Calculator.eventDispatchedメソッド内の処理で
>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;
if(operator != '=')の部分でoperatorが*の場合はregister=0;が実行される。
Calculator.calculateメソッドで
accumulator:それまでの計算結果が格納されている変数
register:計算結果に対してOPERATORの計算を行う値が格納されている変数
accumulator:12、register:0の状態でoperator:*の計算が行われるため、
計算結果は12*0=0
「**=」を行った後の状態もregister:0、operator:*の状態で計算結果は0
>ア 0
が正解。

e:
>3*4=+5
12+5の状態になり5を入力した状態で表示されるのは「5」であるため、
>エ 5
が正解。(=を最後につけた場合は17という計算結果が表示される)

f:
>3+4/0=
最後の=の計算のタイミングで7/0の演算によりCalculator.calculateで
>return accumulator / register;
でArithmeticExceptionが発生し、
>output.display("Error");
が行われる。
>コ Error
が正解。

匿名様 ご投稿

メニューへ戻る

pafuイーランスクール

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