请查看这些代码。它不像我预期的那样工作

时间:2019-05-07 02:37:46

标签: java

代码没有按照我的想法工作。我试图重新编码,但仍然无法获得希望的结果。这是代码:

'year'

这些代码行之后,我想知道为什么ChildrenOfParents.toString()不会打印出子项?那些孩子已经添加到ChildrenOfParents中了吗?我还是Java的新手。请通过代码指导我。我希望创建一个不受家庭成员限制的家谱(例如,如果遵循二叉树,父亲可以有多个儿子,而不是只有2个)。谢谢。

PS:感谢您回答“ this.parent.children.add(this)”使程序正常工作。但是我想知道为什么在调用带有参数的构造函数时,第12行的“ this.parent.children.add(child)”不起作用?父母的孩子变量不是将孩子添加到列表中吗?

1 个答案:

答案 0 :(得分:0)

您需要在第二个构造函数中将child添加到父对象中: 导入java.util.ArrayList; 导入java.util.List;

public class Node<T> {

    private List<Node<T>> children = new ArrayList<Node<T>>();
    private Node<T> parent = null;
    private T data = null;

    public Node(T data) { //used to create parent
        this.data = data;
    }

    public Node(T data, Node<T> parent) {
        this.parent = parent;
        this.data = data;
        this.parent.children.add(this);
    }

    public Node<T> getParent(Node<T> child) {
        return child.parent;
    }

    public List<Node<T>> getChildren() {
        return children;
    }

    public int getSize() {
        return children.size();
    }

    public String toString() {
        String a = "";
        for (int i = 0; i < children.size(); i++) {
            a = a + children.get(i).getData() + ",";
        }
        return a;
    }

    public T getData() {
        return data;
    }
}

public class NodeApp {
    public static void main(String[] args) {
        Node<String> parentNode = new Node<String>("Parent");
        Node<String> childNode1 = new Node<String>("Child 1", parentNode);
        Node<String> childNode2 = new Node<String>("Child 2", parentNode);
        System.out.println(parentNode.getSize());
        System.out.println(parentNode.toString());
    }
}