Java 具有嵌套节点类的树将编译,但插入节点将返回null
我正在尝试将节点作为嵌套类插入到树中。我不明白为什么Java 具有嵌套节点类的树将编译,但插入节点将返回null,java,Java,我正在尝试将节点作为嵌套类插入到树中。我不明白为什么tree.root无法使用我的方法insertNode public class Tree { Node root; private class Node { int value; Node(int value) { this.value = value; } } public static void main(String[] args) { Tree tree = new Tr
tree.root
无法使用我的方法insertNode
public class Tree {
Node root;
private class Node {
int value;
Node(int value) {
this.value = value;
}
}
public static void main(String[] args) {
Tree tree = new Tree();
tree.insertNode(4, tree.root);
System.out.println(tree.root);
}
public void insertNode(int value, Node n){
if(n == null ){
n = new Node(value);
}
}
}
>> null
我错过了什么?
感谢您的帮助代码的作用如下:
树
。编译器将根节点初始化为默认值null
树中
,至少这是方法名称的含义。事实上,该方法除了将参数设置为默认值(如果参数为null)外,什么都不做树的根节点
,该节点为空
insertNode
方法,以便它实际修改树的状态
编辑:当我读到你问题下面的评论时,我注意到一些我一开始遗漏的东西。在您的insertNode
方法中,您可能正打算执行我上面描述的操作。但您所做的是不同的:您将某些内容分配给局部变量,而不是成员变量。以显式表示法编写,您希望执行以下操作:
this.root = new Node(value)
不同之处在于,在代码中,n
不绑定到对象,而是绑定到树。root
意味着对n
的更改(更准确地说是赋值)将不会持久,并且在方法返回时将无效。如果您将一个对象分配给Tree.root
,则此更改将反映在Tree
对象中。您不了解代码的哪些部分在做什么?@nbro我认为问题在于,当我使用insertNode时,保存到Tree.root的节点不会保存在方法之外。超出其范围?我不明白为什么这是“我保存到tree.root的节点”,你在哪里保存它?提示:没有<代码>n
是对对象的引用,而不是要向其中添加节点的对象的字段。研究Java中引用和对象之间以及变量、参数、字段等之间的差异。@Siguza该链接有帮助!谢谢,我不知道现在该怎么办。在阅读了关于“IsJava”的“passbyreference”之后,您的答案是,我认为答案应该是“tree.insertNode(5);void insertNode(int v){this.root=new Node(v);}`但是下一步,构建二叉树,让我感到困惑。我应该编辑这个问题吗?还是开始一个新的?你回答了我的问题:)所以我接受了你的回答。非常感谢。