在Java中从节点创建边

在Java中从节点创建边,java,graph,edges,Java,Graph,Edges,每当尝试从节点创建简单边时,都会出现错误。 基本上,我已经创建了两个自己的类,称为Node和Edge 节点类如下所示: public class Node { public String ident; public int numLinks; public Edge[] neighbours; public Node (String ident) { this.ident = ident; } public void s

每当尝试从节点创建简单边时,都会出现错误。 基本上,我已经创建了两个自己的类,称为Node和Edge

节点类如下所示:

public class Node {

    public String ident;
    public int numLinks;

    public Edge[] neighbours;


    public Node (String ident) {
        this.ident = ident;

    }

    public void setNeighbour (Node start, Node end, int cost, int portNum) {

    }
}
public class Edge {

   Node start;
   Node end;
   int cost;
   int portNum;

   public Edge (Node a, Node b, int cost, int portNum) {
       this.start = a;
       this.end = b;
       this.cost = cost;
       this.portNum = portNum;
   }
}
public void setNeighbour (Node start, Node end, int cost, int portNum) {
    for (int i = 0; i < start.numLinks; i++) {
        neighbours[i] = new Edge (start, end, cost, portNum);
    }
}
我的Edge类如下所示:

public class Node {

    public String ident;
    public int numLinks;

    public Edge[] neighbours;


    public Node (String ident) {
        this.ident = ident;

    }

    public void setNeighbour (Node start, Node end, int cost, int portNum) {

    }
}
public class Edge {

   Node start;
   Node end;
   int cost;
   int portNum;

   public Edge (Node a, Node b, int cost, int portNum) {
       this.start = a;
       this.end = b;
       this.cost = cost;
       this.portNum = portNum;
   }
}
public void setNeighbour (Node start, Node end, int cost, int portNum) {
    for (int i = 0; i < start.numLinks; i++) {
        neighbours[i] = new Edge (start, end, cost, portNum);
    }
}
在我的主类中,我创建了两个节点,即开始节点和结束节点。成本和端口号(这两个节点侦听的端口号),我从文本文件中读取,并将它们保存到名为“linkCostList”和“portNumList”的数组列表中

现在,由于每个开始节点都可以有多条边(我基本上是在创建一个图),因此我将按以下方式调用setNeighbor()方法:

for (int i = 0; i < startNode.numLinks; i++) {
    nextNode = new Node (String name of node I read from text file)
    startNode.setNeighbour (startNode, nextNode, linkCostList.get(i), portNumList.get(i));
}

我知道这是一个空指针异常,所以,在那个循环的某个地方,我一定是做错了什么。有人能帮我弄清楚吗?

您在
节点
类中是否初始化了
邻居
?访问空数组(
邻居[i]
)似乎是个例外


另外,它看起来像是
邻居
数组将动态增长/收缩?在这种情况下,不是使用数组,而是考虑使用ARARYLIST,这样就不必增长<代码>邻居< /代码>你自己。

< P> > @阿尔文的答案(你还没有初始化邻居,也不允许扩展),试试这个:

public List<Edge> neighbours = new ArrayList<Edge>();
考虑将“邻居”重命名为“边”,因为它们只是节点的边


最后,您的逻辑似乎有缺陷。这似乎太复杂了。您可能试图保留邻居的邻居的参考资料。考虑一下在需要的时候把东西找出来。 谢谢你的建议,这确实有道理。我会有以下的一些东西,ArrayList邻居我不想做一个简单的图,它只是以一个图结构的形式。我正在实施链路状态路由。因此,我需要考虑每个邻居和它的端口号,以便我可以与每个节点通信。谢谢您的输入。副本