Java 基礎問題9 平成14年度秋期問8 解説
解説 |
---|
(問題概要) この問題は、論理回路をJavaで実現するものです。 (前提知識) ●抽象クラス ●super (解説) 問題文のプログラムの説明をよく理解することが前提です。 [クラスWireについて] boolern型の変数「value」の取得と設定のクラスです。 (a) 回路の例を見てわかる通り、入力は複数ですが、出力は1個となっています。よって「input」はWire型の配列として定義して、「output」はWire型の変数として定義しています。次がこのクラスのコンストラクタの部分です。上記のinputとoutputは定義しただけで実際にはメモリ上には存在していません。newを使用することによってオブジェクトとなります。for文を確認すると、コンストラクタの引数(nInputs)分、ループしています。ここでnewを使用して配列inputへWireのオブジェクトを格納しています。よって解答「a」は、inputの配列要素をnewで確定する必要があります。従って、input = new Wire[nInputs]となります。 (b) メソッドのconnectOutputToは、プログラムの説明(3)を確認します。ここでこの処理は、回路図の「NOTの出力をANDの入力」へしています。これを実現するためのメソッドです。ここで最後のテスト用のクラスで「not.connectOutputTo(and , 0);」に注目します。この処理がNOTの出力をANDの入力としています。そのためには、引数otherGateをinputとして、これにoutputを代入します。解答は、otherGate.input[nthInput] = output となります。 (c) クラスNotGateの実装です。コンストラクタで、super(1)とあります。これは、スーパークラスのコンスクラクタの実行わ行います。引数に「1」をセットいるのは、inputの配列の要素数は1個のみだからです。メソッドtickは、NOT処理ですから、解答は、!input[0].getValue()となります。 (d) クラスAndGateの実装です。コンストラクタで、super(2)とあるのは、ANDの場合は、inputが2個必要だからです。よって、tickの解答の部分は、input(0)とinput(1)の論理積となります。解答は、input[0].getValue() && input[1].getValue()となります。 (テスト用のクラスについて) 最初の2行で、notとandの名前のオブジォクトをそれぞれ作成しています。実際にはコンストラクタもこの際に実行されますので、inputの配列の要素数も決定します(2個です)。3行目は、上記の(b)の通りです。4行目と5行目で回路に入力する最初の値を設定しています。次のtick()で、NOT演算、AND演算を行い、最後に、この結果を出力しています。 「protected」は「このメソッドを定義したクラスやサブクラス及び同じパッケージから呼び出し可能」です。 |
pafu 投稿
メニューへ戻る