1

私は、ツリーの「空の」部分への null 参照を使用する代わりに、多態性を使用して解決することになっている 2 つのクラス (NonEmptyTree と EmptyTree) を使用する多態性二分探索ツリーを実装する必要がある学校のプロジェクトに取り組んでいます。特定のアクションを実行する必要があるとき。

たとえば、非ポリモーフィックな二分探索ツリーに特定のキー値を挿入したい場合、通常、ツリーを移動するときに null と再帰的に比較し、compareTo 値が 0 になるたびに値を保持することができます。ただし、この場合、この EmptyTree クラスの設計 (インスタンスは 1 つしかない) のため、EmptyTree の単一インスタンスを「解放」する「EmptyTree.getInstance()」と積極的に比較することは基本的に禁じられています。(getInstance() は静的メソッドです)。

これまでに作成したコードを使用して、2 つのクラスへのリンクを添付します。Pastebin の構文強調表示は、すべてのコードをここに挿入するよりもはるかに読みやすいと思うので、これで問題ないことを願っています。

私は解決策や大きな特典を探しているわけではありませんが、ツリーをこのように実装するのは非論理的であるため、非常にイライラしています。(私はすでに null 参照を使用してかなり完全な BST を実装していますが、先に進む方法がわからないため、この演習は無意味だったようです)。さらに、これは来週の日曜日まで期限が切れないので、私の怒りは先延ばしの結果ではなく、個人的な不十分さに対する知的欲求不満の結果です.

どんな洞察も高く評価されます。

NonEmptyTree クラス: http://pastebin.com/

EmptyTree クラス: http://pastebin.com/

ご覧のとおり、EmptyTree.getInstance() メソッドを多用して、新しい NonEmptyList をインスタンス化してその場所に固定する必要があるかどうかを確認する方法が多かれ少なかれ効率的であるように思われるためです。ただし、プロジェクト仕様書の教授の言葉は具体的に次のように述べています。プロジェクトグレード。」

しかし、これらの指示は、「「制御フロー」に例外処理を決して使用しないでください。つまり、コードの動作を制御する方法として例外をキャッチすることを誤用する」という前学期の講義と矛盾しているように感じます。私が書いた、try-catch ブロックを使用して Tree を返す単一のメソッドでさえ、冒涜のように感じます。

4

1 に答える 1

0

これを「解決策」または「大きなプレゼント」と考えるかもしれませんが...

少なくともJavaでは、これはばかげているように思えることに同意します。

ただし、アイデアはおそらく、EmptyTreeクラスNonEmptyTreeが何らかのPossiblyEmptyTree基本クラスから継承され、それぞれのメソッドを異なる方法でオーバーライドして、呼び出し元PossiblyEmptyTreeが が空かどうか (つまり、ポリモーフィズム)を認識 (またはチェック) することなく、正しい動作を実現することです。 .

ソリューションに表示される可能性のあるコード:

public class EmptyTree ... {
    ...

    public V search(K key) {
        /* definitely not here! */
        return null;
    }
}
于 2012-10-28T04:10:32.393 に答える