Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 邻接列表添加关系_Java_Graph_Nullpointerexception_Adjacency List - Fatal编程技术网

Java 邻接列表添加关系

Java 邻接列表添加关系,java,graph,nullpointerexception,adjacency-list,Java,Graph,Nullpointerexception,Adjacency List,我刚开始使用图形,我正在尝试使用城市建立一个邻接列表。这两个城市被发送到addRelation方法。我想说的是,如果已经没有一个顶点与第一个或最后一个字符串相匹配,那么就用不存在的字符串创建一个新的顶点。现在,我得到的是一个空指针异常,位于带有*的行中。有人对我做错了什么或我应该做什么有什么想法吗 public class AdjList { public class Node{ int num; Node next; Node(int num, Node next){

我刚开始使用图形,我正在尝试使用城市建立一个邻接列表。这两个城市被发送到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);
        }
    }
}

在您编写的代码行中

Vertex [] aList= new Vertex [50];
这只会为您分配足够的空间,使您可以容纳多达50个顶点项。然而,这并不意味着在分配后数组将立即填充它们。所以你基本上有能力存储50个顶点项目

在您的方法addRelation中,它正在检查!aList[i].city.equalsfrom,但是aList数组没有任何实际的顶点对象,因此当您尝试从aList[i]查询城市字段时,实际上是在尝试查询空对象,因此出现空指针异常

有两种解决方法

按照您在注释中的建议,在继续循环之前检查null 在调用任何方法之前,使用虚拟顶点对象填充数组。
虚拟方法将要求您使用空字符串/构造函数参数的null参数初始化对象,或者您可以实现默认构造函数,只说new Vertex,然后在代码逻辑中自定义Vertex对象的city和next字段。

列表数组现在满是null。所以当你访问aList[i]时,它会抛出一个NPE@AlejandroLucena因此,我必须首先检查aList[I]==null?好的,是和否。你可以这样做,或者在调用addRelation之前,循环并用虚拟顶点实例填充数组。另一方面,为什么彼此之间有3个公共类?@AlejandroLucena你不能这样做吗?其中一个选项比另一个更好吗?我想这是实现特定的,并且是一种编码风格偏好。如果内存是个大问题,那么只在需要时添加显然是最佳选择检查循环中是否为null。好的。所以除了检查它是否为null之外。我对邻接矩阵的加法正确吗?那要看情况了。我还没有看到你剩下的代码,或者它的逻辑。为了澄清,你刚才说的是邻接矩阵,但在标题中你说的是邻接列表。我想你想要一张单子?
Vertex [] aList= new Vertex [50];