为什么会出现nullpointerexception?

时间:2014-03-14 11:54:31

标签: java nullpointerexception priority-queue

我正在使用堆栈实现优先级队列,但是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();
    }
}

编辑:以正确的方式反映遇到的问题:)

2 个答案:

答案 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; }

MyNode类中的

方法。