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++; } }
额外优化建议
- 给
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++; } }
- 消除代码冗余:
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
相关产品推荐
相关产品推荐

