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

メニューへ戻る

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 投稿

メニューへ戻る

pafuイーランスクール

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