Предупреждение NullPointerException в бинарном дереве поиска - PullRequest
0 голосов
/ 08 июля 2019
 public void dfs(){
        LinkedList<BinaryNode> linkedList = new LinkedList<>();
        linkedList.add(root);

        while(!linkedList.isEmpty()){
            BinaryNode currentNode = linkedList.pollLast();

            if(currentNode.getRight() != null){
                linkedList.add(currentNode.getRight());
            }

            if(currentNode.getLeft() != null){
                linkedList.add(currentNode.getLeft());
            }

            System.out.println(currentNode.getNumber());
        }
    }

if(currentNode.getRight() != null) предупреждает меня в IntelliJ

Вызов метода 'getRight' может вызвать исключение NullPointerException

Может кто-нибудь дать мне пример того, как я могу получить исключение NullPointerException.

Класс BinaryTree имеет только один конструктор

public class BinaryTree {
    private BinaryNode root;

    public BinaryTree(BinaryNode root) {
        this.root = root;
    }

    // rest of code here including bfs/dfs algorithms
}

также вот класс Node:

public class BinaryNode {
    private int number;
    private BinaryNode left;
    private BinaryNode right;

    public BinaryNode(int number) {
        this.number = number;
    }

    //boilerplate code here
}

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Вы получаете это предупреждение, потому что приведенная ниже переменная,

BinaryNode currentNode = linkedList.pollLast();

Может быть нулевым в любой момент времени, таким образом

if(currentNode.getRight() != null){
    linkedList.add(currentNode.getRight());
}

Будет генерировать исключение нулевого указателя, если значение currentNode равно нулю.

Этого можно избежать, проверив, является ли значение currentNode нулевым, ниже, например так:

   while(!linkedList.isEmpty()){
        BinaryNode currentNode = linkedList.pollLast();

        if (currentNode != null) { //Null check is here
            if(currentNode.getRight() != null){
                linkedList.add(currentNode.getRight());
            }

            if(currentNode.getLeft() != null){
                linkedList.add(currentNode.getLeft());
            }

            System.out.println(currentNode.getNumber());
        }
    }
0 голосов
/ 08 июля 2019

Документы для pollLast Упоминание:

Retrieves and removes the last element of this list, or returns null if this list is empty.

Вы должны сначала проверить, что возвращаемое значение не равно нулю. Пример:

BinaryNode currentNode = linkedList.pollLast();
if(currentNode != null && currentNode.getRight() != null)
...