我第一次使用Java处理优先级队列,我一生都无法理解我正在做的事情会导致异常。我正在尝试为旅行商问题实施一种蚁群式解决方案。以下是为我的AntColony类调用的唯一代码。
public AntColony(TSPInstance p) {
PriorityQueue<Ant> ants = new PriorityQueue<Ant>(new AntComparator());
size = p.getDimension();
for (int i = 0; i < size; i++) {
ants.offer(new Ant(p));
}
shortestTour = Integer.MAX_VALUE;
}
public void nextMove() {
ants.poll();
}
我随后作为测试运行的代码如下(仅在main方法中)。
AntColony a = new AntColony(p);
a.nextMove();
a.nextMove()在ants.poll()部分抛出NullPointerException,但是如果我将构造函数更改为(出于调试目的)
public AntColony(TSPInstance p) {
PriorityQueue<Ant> ants = new PriorityQueue<Ant>(new AntComparator());
size = p.getDimension();
for (int i = 0; i < size; i++) {
ants.offer(new Ant(p));
}
ants.poll(); //ADDED THIS
shortestTour = Integer.MAX_VALUE;
}
然后做
AntColony a = new AntColony(p);
我没有例外。我正在努力了解如何从ants.poll()获取异常,但是当我从构造函数调用它时,一切正常。任何帮助,将不胜感激。这个项目中有很多用于处理各种事情的代码,所以我认为上传所有内容都不会对任何人有帮助,所以让我知道是否应该包含一些内容,但是我不认为问题可能出在这两个方面之外代码。
补充:实际例外
Exception in thread "main" java.lang.NullPointerException
at data_structures.AntColony.nextMove(AntColony.java:25) (the ants.poll() part)
at algorithms.ACTest.main(ACTest.java:6) The a.nextMove() part
最佳答案
ants
构造函数中的AntColony
变量是局部变量。因此,当您退出构造函数时,它不再存在。显然,您的ants
方法正在调用的nextMove
变量是类成员。
您需要将构造函数更改为:
// initialize the class member, not a local instance.
ants = new PriorityQueue<Ant>(new AntComparator());
关于java - PriorityQueue poll()抛出NullPointerException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43522287/