0

この複合ツリーでは、柔軟なツリートラバーサルのために親ノードへの参照を保持しています。親のnull参照を常にチェックする必要はありませんが、NullNodeクラスを作成し、各ノードの親をこれに初期化すると、NullNodeにはNullNodeがあり、NullNodeには。があるため、スタックオーバーフローが発生します。 .. ad infinitum NullNodeの親をnullに設定しようとしましたが、それでも、目的を無効にしているように見える親に対してnull参照チェックを実行する必要があります。誰かがこれに遭遇しますか?何かできるとしたら?

ありがとう!

4

2 に答える 2

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();
 }
于 2011-06-21T18:36:26.613 に答える
1

NullNodeクラスを作成し、各ノードの親をこれに初期化すると、NullNodeにはNullNodeがあり、NullNodeには... ad infinitumがあるため、スタックオーバーフローが発生します。NullNodeの親をnullに設定しようとしましたが、それでも目的を破ったように見える親のnull参照チェックを実行します。誰かがこれに遭遇しますか?

親としてNullNode実際に別のものを含める必要はありません。で(またはあなたがそれを呼んでいるものは何でも)NullNode実装して、あなたの言語でそれを返すか、またはそれを意味するものは何でも。getParent()NullNodethisself

ただし、ある時点でトラバーサルを停止する必要があるため、これはまだ悪い考えかもしれません。上記はコンストラクターの再帰を通過しますが、ツリーのルートはありません。これは、NullNodeがずっと上にあるか、タートルがずっと下にあるか、またはそのようなものであるためです。

これは、コードが機能していない場合でも実際にコードを表示し、使用計画を少し説明すると、すべて話しやすくなります。

于 2011-06-21T22:18:08.323 に答える