开发Dijkstra算法时AWT-EventQueue-0线程出现NullPointerException求助
Dijkstra算法Java实现空指针异常修复方案
- 异常本质是代码132/133行涉及的某个对象未完成初始化就被调用了属性/方法,结合报错线程是
AWT-EventQueue-0,说明异常是UI交互触发算法运行时抛出,优先按以下顺序排查:- 检查算法入参:确认从UI组件获取的起点、终点、图结构数据是否加载完成,是否存在传入null值的情况
- 检查132/133行涉及的所有变量:如果行内有自定义节点类的方法调用(比如
node.getId()、edge.getWeight()),先确认调用方法的node、edge对象是否为null - 检查Dijkstra核心数据结构:
- 距离数组/Map是否所有节点都完成了初始值赋值,未初始化的节点距离值如果存为null,读取时会触发空指针
- 优先队列中存储的节点对象是否有null值,入队前未做非空校验的情况下,出队调用方法直接报错
- 邻接表中是否存在null边条目,遍历邻接边时没有跳过null值就调用方法会抛错
- 快速调试方法:
在132行开头对所有涉及的对象逐一加非空判断打印,比如行内代码为
int newDist = dist[current] + edge.getWeight();,就添加if (edge == null) System.out.println("当前遍历边为空");、if (dist[current] == null) System.out.println("当前节点距离未初始化");,运行一次即可定位到具体为null的对象。
- 常见实现踩坑点:
很多开发者实现Dijkstra时只会给起点初始化距离值,其余节点距离默认留空为null,遍历到未访问节点时读取距离值就会触发空指针,需要初始化时给所有节点的距离统一赋值为无穷大(比如Integer.MAX_VALUE)。
内容的提问来源于stack exchange,提问作者João Rodrigues
相关产品推荐
相关产品推荐

