java - 检查数组是否为空而不获取 NullPointerException
问题描述
检查数组是否为空时出现 NullPointerException 错误。当数组为空时它应该返回 null,但我找不到它为什么不工作的原因。关于我做错了什么的任何提示?这是我的整个代码:
import java.lang.reflect.Array;
public class EventPriorityQueue {
class Node {
Event event;
int priority;
Node(Event event, int priority) {
this.event = event;
this.priority = priority;
}
}
private int size;
private Node[] array;
public EventPriorityQueue() {
this.size = 0;
array = new Node[20];
}
public int size() {
return size;
}
public void insert(Event event, int priority) {
if (size == 0) {
array[0] = new Node(event, priority);
size++;
return;
}
if (size == array.length) {
Node[] array2 = new Node[size*2];
System.arraycopy(array, 0, array2, 0, array.length);
array = array2;
}
if (size > 0) {
array[size] = new Node(event, priority);
size++;
percolateUp(size - 1);
}
}
private void percolateUp(int index){
int parentIndex = (index - 1) / 2;
while (array[index].priority < array[parentIndex].priority) {
Node temp = array[parentIndex];
array[parentIndex] = array[index];
array[index] = temp;
index = parentIndex;
parentIndex = (index - 1) / 2;
}
}
public Event peek() {
return array[0].event;
}
public Event poll() {
if (array[0] == null) {
return null;
}
Node deletedElement = array[0];
array[0] = array[size - 1];
array[size - 1] = null;
size--;
percolateDown(0);
return deletedElement.event;
}
private void percolateDown(int index) {
int smallest = index;
int rightChildIndex = (index * 2) + 2;
int leftChildIndex = (index * 2) + 1;
if (array[leftChildIndex] != null) {
if (array[leftChildIndex].priority < array[smallest].priority) {
smallest = leftChildIndex;
}
}
if (array[rightChildIndex] != null) {
if (array[rightChildIndex].priority < array[smallest].priority) {
smallest = rightChildIndex;
}
}
if (smallest != index) {
Node temp = array[index];
array[index] = array[smallest];
array[smallest] = temp;
index = smallest;
percolateDown(smallest);
}
}
public int[] toPrioritiesArray() {
// DO NOT CHANGE THIS FUNCTION
int[] result = new int[this.size];
for (int i = 0; i < this.size; i++) {
result[i] = this.array[i].priority;
}
return result;
}
public static boolean checkHeapProperty(int[] priorities) {
for (int i = 0; i < priorities.length; i++) {
if (2 * i + 1 < priorities.length && priorities[i] > priorities[2 * i + 1]) {
return false;
}
if (2 * i + 2 < priorities.length && priorities[i] > priorities[2 * i + 2]) {
return false;
}
}
return true;
}
public static void main(String[] args) {
// initialize the queue
EventPriorityQueue queue = new EventPriorityQueue();
// add some numbers to the queue
int NUM_EVENTS = 1;
for (int i = NUM_EVENTS; i > 0; i--) {
queue.insert(new Event(i), i);
System.out.println("inserted " + i);
}
// poll everything
for (int i = 1; i <= NUM_EVENTS + 1; i++) {
int next = queue.poll().getTime();
System.out.println("polled " + next);
}
}
}
我认为我的错误在这里:
public Event poll() {
if (array[0] == null) {
return null;
}
任何提示/帮助将不胜感激!
解决方案
我不太了解这个问题,但是我想我看到了这个问题,试试这个 -
public Event poll() {
if (array.length == 0) {
return null;
}
希望这可以帮助!
推荐阅读
- google-maps - 是否可以从静态地图图片中提取坐标?
- java - 密封类修饰符如何帮助 Java 中的模式匹配?
- javascript - 用于订阅的 PayPal 智能按钮流程存在问题
- php - php mysql固定值比率按钮获取所有状态
- aes - Python和C中的AES时间有什么区别?
- javascript - 道具在反应中解构
- jquery - ms-access 查询 sql :为每个客户端选择一行
- php - 在 jQuery attr 中使用 wp_localize_script 图像路径
- python - 按会话匹配一个 Python 列表中的项目
- laravel - 使用带有不同列名的 whereIn (Eloquent)