在Java中从节点创建边缘

问题描述

| 大家好,每当尝试从节点创建简单边时,都会出错。 基本上,我已经创建了两个自己的类,分别称为Node和Edge。 Node类如下:
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) {

    }
}
我的Edge类如下:
public class Edge {

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

   public Edge (Node a,Node b,int portNum) {
       this.start = a;
       this.end = b;
       this.cost = cost;
       this.portNum = portNum;
   }
}
在我的主类中,我创建两个节点,即开始和结束节点。我从一个文本文件中读取了成本和端口号(这两个节点都在其上监听的端口号),并将它们保存到名为\“ linkCostList \”和\“ portNumList \”的数组列表中。 现在,由于每个起始节点可以有多个边(我基本上是在创建图),所以我以以下方式调用setNeighbour()方法,
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));
}
我的setNeighbour方法如下:
public void setNeighbour (Node start,int portNum) {
    for (int i = 0; i < start.numLinks; i++) {
        neighbours[i] = new Edge (start,end,cost,portNum);
    }
}
每当我编译它时,都会出现以下错误;
Exception in thread \"main\" java.lang.NullPointerException
    at Node.setNeighbour(Node.java: *line number*)
    at Start.startlsr(Start.java: *line number*)
    at graph.main(lsr.java: *line number*)
}
我知道这是一个空指针异常,因此在该循环中的某个地方,我一定做错了什么?谁能帮我解决这个问题或给我一些建议吗? 非常感激。     

解决方法

        您是否在ѭ6班上以ѭ5开头?看起来例外是访问空数组(
neighbours[i]
)。 看起来the5数组会动态增长/缩小吗?在这种情况下,可以考虑使用ArrayList而不是使用array,这样您就不必自己成长5倍。     ,        进一步@Alvin的答案(您尚未初始化邻居,也不允许扩展),请尝试以下操作:
public List<Edge> neighbours = new ArrayList<Edge>();
还可以使用java的\“ foreach \\”:
    for (Edge edge : start.neighbours) {
        // .. some code
    } 
考虑将“邻居”重命名为“ edges”,因为它们就是节点的边缘。 最后,看来您的逻辑中有错误。看来太复杂了。您可能正在尝试保留邻居的邻居的引用。考虑在需要时简单地查找东西。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...