Исключение нулевого указателя в операторе If - PullRequest
1 голос
/ 01 февраля 2012

Надеюсь, вы, ребята, сможете понять, почему я получаю исключение нулевого указателя с тем, что я могу предоставить, в программе есть несколько классов и методов, но это тот, который ломает.

public void search(Node node, String sData, int iData)
{
    if (sData.equals(node.getString()) && (iData == node.getInt()))
    {
        System.out.println("Nailed it");
    }else if (sData.compareTo(node.stringData) < 0)
    {
        search(node.left, sData, iData);
    }else if (sData.compareTo(node.stringData) > 0)
    {
        search(node.right, sData, iData);
    }

}

Узел, который сначала получает входные данные, является корневым, а затем он проходит влево или вправо оттуда через рекурсию, но строка, в которой говорится о его ошибке, - это оператор if вверху. Невозможно понять, что не так. SData - это просто стандартный строковый ввод, когда вызывается метод, а iData - это просто int, который также вводит. Не могу понять = / спасибо за любую помощь

Ответы [ 2 ]

4 голосов
/ 01 февраля 2012

Вам нужно добавить следующее в верхней части вашего метода:

if (node == null) return;

Это обеспечит корректный возврат метода, если вы ищете что-то, чего не существует в структуре.В противном случае с существующим кодом вы встретите NullPointerExceptions, когда метод встретит конечные узлы.

4 голосов
/ 01 февраля 2012

Две возможности: либо sData, либо узел имеют значение null; ваши рекурсивные вызовы потенциально пропускают нулевые узлы, вот с чего я бы начал Я не могу сказать больше из вашего кода, извините.

Кроме того, рассмотрите возможность использования отладчика для просмотра кода, если вы не можете найти ошибку. Это обычно помогает с таким кодом.

...