我正在尝试使用int初始化Comparable数组来确定初始化数组的大小。但是,在初始化数组后,数组为null。如果我尝试将数据添加到数组中,我会得到一个NPE。
下面是一些相关的代码(我意识到它不是类型安全的,这不是一个关注的问题)
public class Heap implements MyHeap{
int capacity;
int size;
Comparable[] heap;
public void Heap(){
size = 0;
capacity = 10;
heap = new Comparable[capacity];
}
public void printHeap(){
for (int i = 1; i <= size; i++){
System.out.println(heap[i]);
}
}
public void insert (Comparable object){
size++;
heap[size] = object;
bubbleUp(size);
}
编辑:我已经改变了我的代码以反映第一个答案的建议。在使用该int初始化数组之前,我设置了int容量的值,并且该数组仍然为null并且具有null长度。我甚至使用int作为参数来初始化数组,而不是变量容量,我得到了相同的行为。
答案 0 :(得分:1)
在使用数组之前,您从未初始化用于设置数组大小的变量capacity
。将您的代码更改为以下内容:
public class Heap implements MyHeap{
int capacity;
int size;
Comparable[] heap;
public Heap(){
size = 0;
capacity = 10;
heap = new Comparable[capacity];
}
编辑:我还注意到您的插入代码存在问题。您正在使用您的大小计数器作为访问变量,这将无法工作,因为虽然大小可以是1,但数组的第一个位置是0.更改为以下代码。从技术上讲,你的代码可以工作,直到你接近数组的末尾,当它真的搞砸了。你的打印代码也不太正确。
public void printHeap(){
for (int i = 1; i < capacity; i++){
if(heap[i] != null) {
System.out.println(heap[i]);
}
}
}
public void insert (Comparable object){
if(size < capacity) {
heap[size] = object;
bubbleUp(size);
size++;
}
}