我为链表创建了一个搜索方法。当我搜索列表中存在的内容时,它可以正常工作。如果我搜索不在列表中的内容,那么我会得到一个空指针异常。
我不知道如何才能获得此异常。
以下是方法:
// 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递归调用search(),它到达最后一个元素并调用search(cityName,null),然后current为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)
答案 0 :(得分:0)
我会在调用递归搜索之前添加一个检查,以查看current.next是否为null:
if(current.next != null) {
return search(cityName,current.next);
}
else {
return null;
}
这可能会解决空指针异常......