/ Solved /我实际上传递了null。因为它不包含任何信息,所以向它添加值不会影响我的树,谢谢你的回答!
我们在Java中有一个任务是创建一个可以容纳整数的二叉树。我们必须编写一个insert函数,通过巧合将一个整数插入到树中。我现在已经编写了函数,但不知何故它没有添加我输入的值。
我的类由一个整数"value“和左、右分支的两个引用" left”和" right“组成。另外,我必须以这种方式编写这个函数,所以它们必须返回void,我知道还有更简单的方法。
所以,现在,我已经知道我已经到达了叶子。那么它就是t == null。当我尝试的时候,然后把"t = new CONSTRUCTOR(value,...)“这不会改变任何事情。
public void insert_in_tree(int i) {
/*Creating random number*/
Random rand = new Random();
int rand_num = rand.nextInt(2);
if(rand_num == 0) {
setLeft(this.left, i);
} else {
setRight(this.right, i);
}
}
..。下面是"setLeft“( "setRight”函数是一样的,我只是在调用它时传递了正确的子树)函数的代码:
void setLeft(IntBinTree t, int value) {
if(t == null) {
t = new IntBinTree(value, null, null);
return;
}
int i = 0;
/*Random number*/
Random rand = new Random();
int rand_num = rand.nextInt(2);
/*Calling either left or right*/
if(rand_num == 0) setLeft(t.left, value);
setRight(t.right, value);
}
我想,错误是调用函数,然后更改局部变量"t“,而不是使用"this”。但是,由于我传递的是" this“的引用,这样做应该不会有任何问题,有人能发现错误吗?
发布于 2019-05-09 06:00:57
您正在将null传递给函数。而不是对象。
如果你传递了一个对象(例如"this"),它将传递对该对象的引用(实际上,Java是"Pass by value",但你通过值传递的是引用,而不是对象本身),对它的任何更改都会反映在函数之外。
传递一个null不会这样做,因为没有对象引用,您只是传递了一个与原始对象无关的"null“值,因此在第二个函数中对"t”所做的任何更改都会丢失。
你应该做的是两件事中的一件:
顺便说一句,在顶级方法和set方法中,left/right的代码几乎相同--将其完全保留在set方法中会更容易。
https://stackoverflow.com/questions/56049363
复制相似问题