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 が正解。 |
匿名様 ご投稿
メニューへ戻る