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