我正在尝试实现树数据结构。目前我遇到了在GeneralTree.java中编写addNode()方法的问题。我想检查一下GeneralTree.root()是否为null,如果是,则将数据添加到节点。我在从GeneralTree类的GeneralNode类访问数据实例变量时遇到问题。
GeneralNode.java
import java.util.ArrayList;
public class GeneralNode {
int data;
GeneralNode parent;
ArrayList<GeneralNode> children;
public void setData(int i){
data = i;
}
public int getData(){
return data;
}
}
GeneralTree.Java
import java.util.ArrayList;
public class GeneralTree {
GeneralNode root;
public GeneralTree(){
}
public void addNode(int data){
if (GeneralTree.root == null){
root.setData(data);
}
}
public boolean isEmpty(){
return root == null;
}
public GeneralNode root(){
return root;
}
/*
public int getPosition(){
return position;
}
*/
public static void main(String[] args){
GeneralTree myTree = new GeneralTree();
System.out.println(myTree);
System.out.println(myTree.root());
System.out.println(myTree.isEmpty());
}
}
答案 0 :(得分:0)
你的addNode方法不应该编译,因为root不是静态的,所以你应该直接访问它,不需要类名。 条件应该是!= null:
public void addNode(int data){
if (root != null){ //updated line
root.setData(data);
}
}
此外,您的构造函数应该初始化root:
public GeneralTree() {
root = new GeneralNode();
}
答案 1 :(得分:0)
如果引用不是静态的,则无法访问root
引用,例如GeneralTree.root
。如果所有GeneralTree对象的root值相同,则将其声明为static。
如果所有GeneralTree对象的root值不相同,请更改您的方法:
public void addNode(int data){
if (this.root == null){
root.setData(data);
}
答案 2 :(得分:0)
如果我正确理解您的问题,您需要创建一个GeneralNode实例或使该类静态。
public static void main(String[] args){
GeneralTree myTree = new GeneralTree();
GeneralNode theGeneralNode = new GeneralNode();
System.out.println(myTree);
System.out.println(myTree.root());
System.out.println(myTree.isEmpty());
}
之后你可以使用GeneralNode来引用其中的数据。