我刚开始使用图表,我正在尝试使用城市构建邻接列表。这两个城市被发送到addRelation方法。我想说,如果已经没有匹配第一个或最后一个字符串的顶点,请创建一个新的顶点,其中的字符串不存在。现在,我得到的是带有 * 的行的空指针异常。有没有人对我做错了什么或我应该做什么有任何想法?
public class AdjList {
public class Node{
int num;
Node next;
Node(int num, Node next){
this.num=num;
this.next=next;
}
}
public class Vertex{
String city;
Node list;
Vertex(String city, Node next){
this.city=city;
this.list=next;
}
}
Vertex [] aList= new Vertex [50];
void addRelation(String from, String to) {
for(int i=0; i<aList.length; i++){
****if(!aList[i].city.equals(from)){****
aList[i]=new Vertex(from, null);
}
if(aList[i].city.equals(from)){
aList[i]=new Vertex(from, null);
}
}
}
主:
public static void main(String args[]) {
AdjList g = new AdjList ();
g.addRelation("Atlanta", "Chattanooga");
g.addRelation("Chattanooga", "Nashville");
g.addRelation("Chattanooga", "Knoxville");
g.addRelation("Atlanta", "Birmingham");
g.addRelation("Greenville", "Knoxville");
}
答案 0 :(得分:0)
在您编写的代码行中
Vertex [] aList= new Vertex [50];
这只是为您分配足够的空间可能最多可容纳50个Vertex
个项目。但这并不意味着阵列将在分配后立即填充它们。所以你基本上有容量来存储50个Vertex
项目。
在您的方法addRelation
中检查是否!aList[i].city.equals(from)
,但aList
数组没有任何实际的Vertex
对象,因此当您尝试查询{{来自city
的1}}字段,您实际上是在尝试查询空对象,因此是空指针异常。
这有两种解决方法。
aList[i]
对象填充数组。虚拟方法需要您使用构造函数参数的空字符串/ null参数初始化对象,或者您可以实现默认构造函数,只需说出Vertex
然后自定义new Vertex()
和{ {1}}代码逻辑中city
对象的字段。