0

Java ファイルには、次のコードがあります。

MyTree atree = new MyTree();
atree.insert(1);

これは普通の木ではありません。「atree」はルートノードです。このツリーの各ノードには 5 つの子があり、最初はすべて null に設定されています。挿入のパラメーターは、「アクティブ化」する、つまり非 null にする子です。だから私はこれを行う MyTree クラスのメソッドを持っています:

public void insert(int i)
{
    if(i == 1)
    {
        MyTree current = this.getChildOne();
        current = new MyTree();
    }
}

関数を呼び出した後、関数を呼び出したファイルの最初のノードを確認します。

if(atree.getChildOne() == null)
{
    return -1;
}

そして、常に負の値を返します。挿入機能は、実際の「atree」ではなく、「atree」のコピーで実際に機能していると思われます。しかし、私は完全にはわかりません。誰か説明がありますか?

4

2 に答える 2

3

子をどこかに割り当てているようには見えません。コード

MyTree current = this.getChildOne();
current = new MyTree();

子を割り当てません。ローカル変数を初期化しますcurrentが、メソッドが終了するとその変数は失われます。

おそらく、挿入メソッドでこのようなことをしたいと思います

if ( i == i ) {
   this.childOne = // assign it here
}
于 2012-08-16T20:51:01.093 に答える
0

current = new MyTree()はローカル変数を変更しますcurrent。それは、指すインスタンスをthis.getChildOne()指していましたが、現在は新しいインスタンスを指しています。(したがって、割り当てを削除することもできます。副作用がcurrent = this.getChildOne()ない限り、この割り当ては無意味です。別のものに設定してすぐに上書きするためです。)getChildOnecurrent

の属性を実際に変更するにはthis、次のように記述します。

if(i == 1)
{
    this.setChildOne(new MyTree());
}
于 2012-08-16T20:50:49.117 に答える