Невозможно получить значение корневого узла из True. Вместо этого дает значение последних узлов

У меня есть открытый класс Q5, который имеет вложенный закрытый статический класс BinTree. В основном я создаю объект q5 и даю 3 узла для добавления в дерево.

Когда я пытаюсь получить значение корня, он возвращает значение последнего узла (здесь он должен возвращать 1, а не 3)

public class Q5 {

private static BinTree root;



public Q5(int ... args) 
{
    BinTree binTreeLeftChild,binTreeRightChild,root;


    root = new BinTree();       
    binTreeLeftChild = new BinTree();
    binTreeRightChild = new BinTree();


    root.value  = args[0];
    binTreeLeftChild.value = args[1];
    binTreeRightChild.value = args[2];

    root.left = binTreeLeftChild;
    root.right = binTreeRightChild;


}


private static class BinTree
{
    private static BinTree left;
    private static BinTree right;
    private static int value;

    public BinTree() 
    {
        // TODO Auto-generated constructor stub
        left = null;
        right = null;
        value = 0;
    }
}


public static void main(String[] args) 
{


    Q5 q5 = new Q5(1,2,3); 


    System.out.println(q5.root.value);



}

2 ответа

Решение

Вы должны удалить static идентификаторы в BinTree в противном случае все объекты этого класса будут иметь одинаковые значения.
В Q5(int ... args) у вас есть личная переменная, которая скрывает переменную класса root, Вы должны удалить это тоже.
Исправленный код:

public class Q5 {
    private static BinTree root;

    public Q5(int ... args) {
        BinTree binTreeLeftChild,binTreeRightChild;
        root = new BinTree();       
        binTreeLeftChild = new BinTree();
        binTreeRightChild = new BinTree();
        root.value  = args[0];
        binTreeLeftChild.value = args[1];
        binTreeRightChild.value = args[2];
        root.left = binTreeLeftChild;
        root.right = binTreeRightChild;
    }
    private static class BinTree{
        private  BinTree left;
        private  BinTree right;
        private  int value;
        public BinTree() {
            // TODO Auto-generated constructor stub
            left = null;
            right = null;
            value = 0;
        }
    }
...
}

Я думаю, что проблема в вашем "статическом". Попробуйте использовать нестатические переменные для вашего BinTree.

Другие вопросы по тегам