java - 在java中调用一个类的多个实例时出现问题

标签 java

我在调用我编码的类的多个实例(Tree、TreeNode)时遇到问题 在 main 方法中,即使两棵树明显是不同的树,系统也会给出输出 c d j c d j 。 如果我要分开两个 postOrder() 调用(每个调用都在树被插入堆栈后调用)

    Stack<Tree> alphaStack = new Stack<Tree>();
    TreeNode a = new TreeNode('i');
    Tree tree = new Tree(a);
    TreeNode newleft = new TreeNode('a');
    TreeNode newright = new TreeNode('b');
    tree.setLeft(a, newleft);
    tree.setRight(a, newright);
    alphaStack.push(tree);
    Tree.postOrder(alphaStack.pop().getRoot());

    TreeNode b = new TreeNode('j');
    Tree newtree = new Tree(b);
    TreeNode left = new TreeNode('c');
    TreeNode right = new TreeNode('d');
    newtree.setLeft(b, left);
    newtree.setRight(b, right);
    alphaStack.push(newtree);

    Tree.postOrder(alphaStack.pop().getRoot());

输出将是 a b i c d j。

这是否意味着我的类不会被重复,而是在我创建新树时被重用?

下面是代码:

import java.util.Stack;

public class mast_score {

public static void main(String[] args){
    Stack<Tree> alphaStack = new Stack<Tree>();
    TreeNode a = new TreeNode('i');
    Tree tree = new Tree(a);
    TreeNode newleft = new TreeNode('a');
    TreeNode newright = new TreeNode('b');
    tree.setLeft(a, newleft);
    tree.setRight(a, newright);
    alphaStack.push(tree);

    TreeNode b = new TreeNode('j');
    Tree newtree = new Tree(b);
    TreeNode left = new TreeNode('c');
    TreeNode right = new TreeNode('d');
    newtree.setLeft(b, left);
    newtree.setRight(b, right);
    alphaStack.push(newtree);

    Tree.postOrder(alphaStack.pop().getRoot());
    Tree.postOrder(alphaStack.pop().getRoot());

} }

树节点代码

public class TreeNode{ Object item;

TreeNode parent;
TreeNode left;
TreeNode right;

public TreeNode (Object item) {
    this.item = item;
    parent = null;
    left = null;
    right = null;
}

public TreeNode getParent(TreeNode current) throws ItemNotFoundException
{
    if(current == null) throw new ItemNotFoundException("No parent");
    if(current.parent == null) throw new ItemNotFoundException("This
    is the root");
    else return current.parent;
}
public TreeNode getLeft(TreeNode current) throws ItemNotFoundException
{
    if(current == null) throw new ItemNotFoundException("No left or
    right child");
    if(current.left == null) throw new ItemNotFoundException("No left
    child");
    else return current.left;
}

public TreeNode getRight(TreeNode current) throws ItemNotFoundException
{
    if(current == null) throw new ItemNotFoundException("No left or
    right child");
    if(current.right == null) throw new ItemNotFoundException("No
    right child");
    else return current.right;
}

public Object getElement() throws ItemNotFoundException {
    if(this.item == null) throw new ItemNotFoundException("No such
    node");
    else return this.item;
} }

树类代码

import java.util.*;

public class Tree {

static TreeNode root;
int size;

public Tree() {
    root = null;
}

public Tree(TreeNode root) {
    Tree.root = root;
}

public TreeNode getRoot() {
    return this.root;
}

public int getLvl(TreeNode node) {
    return node.lvlCount;
}

public void setLeft(TreeNode node, TreeNode left) {
    node.left = left;
}

public void setRight(TreeNode node, TreeNode right) {
    node.right = right;
}
public static void postOrder(TreeNode root) {
    if (root != null) {

        postOrder(root.left);
        postOrder(root.right);
        System.out.print(root.item + " ");

    } else {
        return;
    }

}

public static int getSize(TreeNode root) {
    if (root != null) {
        return 1 + getSize(root.left) +
    getSize(root.right);
    } else {
        return 0;
    }
}

public static boolean isEmpty(Tree Tree) {
    return Tree.root == null;
} }

最佳答案

您的问题就在这里,在 Tree 类中:

static TreeNode root;

您应该删除“static”一词,并将 Tree.root 替换为 this.root

添加关键字 static 会导致变量 root 在程序中的所有 Tree 实例之间共享,这不是您想要的.

关于java - 在java中调用一个类的多个实例时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363700/

相关文章:

java - H2 控制台错误 : No suitable driver found for 08001/0

java - 脚本的通用 GUI?

java - jar 找不到方法的符号(但找到了其他类方法)?

java - 使用服务器 API 插入数据时能够回滚更改

java - Apache poi 单元格样式,带有颜色和右对齐

java - 多线程快速排序没有给出预期的答案

java - 无法执行目标 org.grails :grails-maven-plugin:2. 4.4:maven-grails-app-war

java - astar 的启发式函数

java - 当 !=2 时从列表中删除

java - 如何获取java RMI编程的客户端IP?