2011-06-21 12 views
0

このコンポジットツリーでは、フレキシブルツリーのトラバーサルのために親ノードへの参照を保持しています。 NullNodeクラスを作成し、各ノードの親をこれに初期化すると、NullNodeにはNullNodeがあるのでスタックオーバーフローが発生します。NullNodeには..があります。 .. ad infinitum NullNodeの親をnullに設定しようとしましたが、目的を破棄していると思われる親に対してヌル参照チェックを行う必要があります。 誰もこれにぶつかる?何ができたら?ヌルパターンとコンポジットパターンがうまく一緒に再生されない

ありがとうございました!

+0

トラバース機能はどのように機能しますか?あなたは何とか止める必要がありますか?あなたの質問は有効と思われないので、いくつかのコードを投稿する必要があります。 – Nix

+0

私は決して木を捜すのに十分遠くまで来ない。スタックオーバーフローは、NullNodeに初期化された親を含むため、NullNodeの構築中に発生します。 – krakencalamari

+0

NullNodeには、まったく親はありません。下の2番目の答えを擬似コードで参照してください。 –

答えて

1

私はNullNodeクラスを作成し、これに各ノードの親を初期化する場合NullNodeはNullNodeは、AはNullNodeを持っていたので、私は、スタックオーバーフローを取得私はNullNodeの親をnullに設定しようとしましたが、目的を破ると思われる親に対してnull参照チェックを行う必要があります。誰もこれにぶつかる?

NullNodeは、実際に別のNullNodeを親として含む必要はありません。 をNullNode(またはそれを呼び出しているもの)に実装して、thisまたはselfなど、あなたの言語での意味を返してください。

しかし、の場合は、を実行しても、ある時点でトラバーサルを停止する必要があります。上記はコンストラクタの再帰を超えてしまいますが、ツリーのルートはありません.NullNodesはすべての方法やカメのようなものです。

実際にコードが表示されても機能しない場合でも、これを表示して使い方を少し説明すると、話すのがずっと簡単になります。

1

カウンターの例(極端な擬似コード):

class NullNode(): Component{ 
    public NullNode(){ 

    } 
    public something SearchUp(){ 
     return null; 
    } 
} 

class Node: Component{ 
    public Node(t){ 
     this.parent = NullNode(); 
    } 
    public void SetParent(Component parent){ 
     this.parent = parent; 
    } 
    public something SearchUp(){ 
     return self.parent.SearchUp(); 
    } 
    } 

abstract class Component{ 
    Component parent 

    public Component(){ 
    } 
    public something SearchUp(); 
} 
関連する問題