数组没有正确初始化

时间:2014-03-08 17:02:24

标签: arrays nullpointerexception initialization

我正在尝试使用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作为参数来初始化数组,而不是变量容量,我得到了相同的行为。

1 个答案:

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