我正在使用堆栈实现优先级队列,但是NullPointerException
正在发生,我无法弄清楚原因。我试图通过使用MyStack
类中的push方法添加整数“1”。该错误发生在add语句中。
class MyStack<E> {
private PriorityQueue<MyNode<E>> pq;
int p =0;
public void push(int j){
p++;
pq.add(new MyNode(j,p)); // error detected here
}
public MyNode pop(){
if(isEmpty()){
return null;
}
return pq.poll();
}
public boolean isEmpty() {
return pq.isEmpty();
}
}
编辑:以正确的方式反映遇到的问题:)
答案 0 :(得分:1)
如果代码完成,那很简单:你的MyStack类的成员pq永远不会被初始化。
答案 1 :(得分:0)
更改您的行private PriorityQueue<MyNode<E>> pq
//未初始化这就是NPE发生的原因。
到
private PriorityQueue<MyNode<E>> pq = new PriorityQueue<MyNode<E>>();
无需将ComparatorMyNode<E>
作为单独的类。而不是这样,你可以在MyNode类中实现像MyNode<E> implements Comparable<E>
这样的Comparable,并且可以覆盖
public int compareTo(E o) {
return 0;
}
方法。