在Java文件中,我有以下代码:
MyTree atree = new MyTree();
atree.insert(1);
这不是常规树。 “atree”是根节点。此树中的每个节点都有5个子节点,最初都设置为null。 insert的参数是您要“激活”的子项,即使其为非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'。但我不完全确定。有人有解释吗?
答案 0 :(得分:3)
看起来你不是在任何地方分配孩子。代码
MyTree current = this.getChildOne();
current = new MyTree();
不会指定一个孩子。您初始化局部变量current
但是当方法结束时该变量将丢失。
我想你可能想在你的插入方法中做这样的事情
if ( i == i ) {
this.childOne = // assign it here
}
答案 1 :(得分:0)
行current = new MyTree()
更改了局部变量current
:它指向了this.getChildOne()
指向的实例,现在它指向一个新实例。 (因此,您可以删除作业current = this.getChildOne()
:除非getChildOne
有副作用,否则此作业毫无意义,因为您可以通过将current
设置为其他内容来立即覆盖它。)
要实际修改this
的某些属性,您需要编写如下内容:
if(i == 1)
{
this.setChildOne(new MyTree());
}