You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Priority Queue代码报错:NullPointerException问题排查咨询

优先队列代码空指针问题排查与修复

错误核心原因

执行new PQ[size]时,Java仅创建了指定长度的数组容器,数组内的每个PQ对象默认都是null。在enQueue方法中直接给priorityqueue[count].value赋值,本质是对null对象的字段进行操作,因此触发NullPointerException。

修复方案

在enQueue方法中,给数组元素的字段赋值前,先实例化PQ对象:

修改后的enQueue方法代码:

public void enQueue(int element,int priority){
    if (count == priorityqueue.length){
        System.out.println("Priority Queue Overflow!");
    }
    else {
        // 先实例化PQ对象,再赋值字段
        priorityqueue[count] = new PQ();
        priorityqueue[count].value = element;
        priorityqueue[count].priority = priority;
        count++;
    }
}

额外优化建议

  1. 给PQ类添加构造方法,简化实例化逻辑:
public class PQ {
    public int value;
    public int priority;
    
    public PQ(int value, int priority) {
        this.value = value;
        this.priority = priority;
    }
}

此时enQueue方法可简化为:

public void enQueue(int element,int priority){
    if (count == priorityqueue.length){
        System.out.println("Priority Queue Overflow!");
    }
    else {
        priorityqueue[count] = new PQ(element, priority);
        count++;
    }
}
  1. 消除代码冗余:peek方法可直接复用peekprio的结果,避免重复遍历数组:
public int peek(){
    if (count == 0){
        System.out.println("Priority Queue Underflow!");
        return -1;
    }
    else {
        int index = peekprio();
        return priorityqueue[index].value;
    }
}

内容的提问来源于stack exchange,提问作者Samik Pandit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:45:34