Java加权图类实现报错:构造方法中nodes.add(a)触发空指针异常
解决加权图构造方法中的NullPointerException问题
嘿,我来帮你搞定这个烦人的空指针异常!咱们先揪出问题根源,再一步步把它修好。
问题根源
你在WGraph类里声明了public ArrayList<Node> nodes;,但完全没有给这个ArrayList创建实例对象。当构造方法里调用nodes.add(a)时,nodes还是个null,Java自然会抛出NullPointerException。
另外,你的Node类还有个潜在的坑:public ArrayList<Edges> connections;同样没初始化,要是后面你想给节点添加边,调用connections.add(...)时也会触发空指针,咱们一起把它解决掉。
具体修复方案
1. 初始化WGraph中的nodes集合
有两种简单方式可选:
- 方式一:在构造方法里初始化
修改WGraph的构造方法,先实例化nodes再添加元素:public class WGraph { public ArrayList<Node> nodes; public WGraph(int n) { nodes = new ArrayList<>(); // 关键:先创建ArrayList实例 int i; for(i=0; i<=n; i++) { Node a = new Node(i); nodes.add(a); } } } - 方式二:声明时直接初始化
也可以在定义nodes的时候就完成实例化,这样构造方法里不用额外写初始化代码:public class WGraph { public ArrayList<Node> nodes = new ArrayList<>(); // 声明时直接初始化 public WGraph(int n) { int i; for(i=0; i<=n; i++) { Node a = new Node(i); nodes.add(a); } } }
2. 修复Node类的connections集合
在Node的构造方法里初始化connections,避免后续操作触发空指针:
public class Node { public int key; public ArrayList<Edges> connections; public Node(int key) { this.key = key; connections = new ArrayList<>(); // 初始化connections集合 } }
这样修改之后,你的加权图类就能正常创建节点,再也不会抛出空指针异常啦!
内容的提问来源于stack exchange,提问作者PedroGonçalves
相关产品推荐
相关产品推荐

