如何从Java中的另一个类访问实例变量

时间:2017-03-23 16:08:00

标签: java data-structures tree

我正在尝试实现树数据结构。目前我遇到了在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());



}

}

3 个答案:

答案 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来引用其中的数据。