Я создал метод поиска для связанного списка. Он работает правильно, когда я ищу что-то, что существует в списке. Если я ищу что-то не в списке, тогда я получаю исключение с нулевым указателем.null Указатель исключения при поиске связанного списка
Я не вижу, как можно получить это исключение.
Вот метод:
// these two search methods return the node containing the substring given
public UNode search(String cityName)
{
return search(cityName,this);//line 90
}//end search()-------------------------------------------------------------
private UNode search(String cityName, UNode current)
{
if(current != null)
{
if (current.getCity().getName().contains(cityName))
{
System.out.println("Node '" + current.getCity().getName()
+ "' has been found and returned.");
return current;
} else
{
return search(cityName,current.next);//line 105
}
}
else
{
System.out.println("No node containing the substring '"
+ cityName + "' can be found, returning null");
return null;
}
}//end search()-------------------------------------------------------------
В моем понимании, это то, что происходит при поиске чего-то, что не существует: метод продолжает называть поиска() рекурсивно с current.next, он попадает в последний элемент и вызывает поиск (cityName, null), тогда, поскольку текущий имеет значение null, он говорит, что он не найден и возвращает null.
Я что-то упустил? Что я делаю не так? Должен ли я просто выбросить исключение нулевого указателя?
Вот метод, где я вызываю метод поиска:
public static void uNodeTest(City[] cities)
{
UNode unvisited = new UNode();
unvisited.addCities(cities);
String a = unvisited.getNext().getNext().getNext().getCity().getName();
System.out.println(a);
UNode current = unvisited;
while(current.getNext() != null)
{
System.out.println(current.getCity().getName());
current = current.getNext();
}
UNode phil = unvisited.search("not a city");
}
трассировки стека:
java.lang.NullPointerException
at cityproject.UNode.search(UNode.java:105)
.
.
.
at cityproject.UNode.search(UNode.java:105)//(omitting repeats)
at cityproject.UNode.search(UNode.java:90)
at cityproject.CityProject.uNodeTest(CityProject.java:104)
at cityproject.CityProject.main(CityProject.java:79)
Ваша рекурсия заканчивается, когда вы нажимаете «null», а это означает, что вы не нашли город. Вам решать, хотите ли вы исключить исключение или просто вернуть «null» вашему абоненту. Кроме того, ваш код выглядит отлично. –
Ну, я в настоящее время возвращаю null, но вместо того, чтобы возвращать null, он сбой и дает мне исключение null-указателя. – user2809114
Можете ли вы также отправить свой запрос на поиск и отслеживать трассировку стека. Я пока не вижу проблемы. –