Я работаю с организованным BST в своем java-коде. Предполагается, что эта функция/метод ищет в дереве узел с определенным значением и сообщает пользователю, существует ли он или нет.
void search(int item, Node root, int r, int c) {
//if the integer is found
if(root.val == item) {
System.out.println("integer located at row: " + r + " & child: " + c + "\n");
}
//if the integer is not found (use the closest value to find it)
else if(root != null) {
if(item < root.val)
search(item, root.left, r + 1, (c * 2) - 1);
else
search(item, root.right, r + 1, c * 2);
}
//if the root is a null (it doesn't exist or cannot be found)
else {
System.out.println("integer cannot be located\n");
}
}
Проблема в операторе else в конце. Мой компилятор говорит, что все в этом операторе else является мертвым кодом, то есть не используется. Однако мне нужен код в этом операторе else на тот случай, если функция обнаружит нулевое значение и не сможет найти узел с присвоенным значением. Это исчезнет, если я изменю второй оператор else на else if(root.val != item && root != null)
, но это заставит меня задаться вопросом, есть ли точка, в которой root не будет равен нулю, я знаю, что это должно быть возможно. Является ли оператор else действительно мертвым кодом, и если это так, как я могу это изменить?
else if (root != null)
подозрительно. Вif
осуществляется доступ кroot.val
. Если быroot
былоnull
, было бы выброшеноNullPointerException
. Таким образом, если достигнутоelse if
, оно всегда будет вводиться. Таким образом, последнееelse
никогда не будет введено. Я бы предположил, что внешнийif
должен быть первымif
во внешнемelse if
, а внешнийelse if
должен бытьif
. - person Turing85   schedule 09.02.2020