Arrays 数组未正确初始化

Arrays 数组未正确初始化,arrays,nullpointerexception,initialization,Arrays,Nullpointerexception,Initialization,我试图使用int来初始化一个可比较的数组,以确定数组的大小。但是,在初始化数组之后,数组为null。如果我尝试向数组中添加东西,我会得到一个NPE 下面是一些相关代码(我意识到它不是类型安全的,这不是atm的问题) 公共类堆实现MyHeap{ 国际能力; 整数大小; 可比[]堆; 公共空堆(){ 尺寸=0; 容量=10; 堆=新的可比[容量]; } 公共无效打印堆(){ 对于(int i=1;i在使用之前,您从未初始化用于设置数组大小的变量capacity。请将代码更改为以下内容: public

我试图使用int来初始化一个可比较的数组,以确定数组的大小。但是,在初始化数组之后,数组为null。如果我尝试向数组中添加东西,我会得到一个NPE

下面是一些相关代码(我意识到它不是类型安全的,这不是atm的问题)

公共类堆实现MyHeap{
国际能力;
整数大小;
可比[]堆;
公共空堆(){
尺寸=0;
容量=10;
堆=新的可比[容量];
}
公共无效打印堆(){

对于(int i=1;i在使用之前,您从未初始化用于设置数组大小的变量
capacity
。请将代码更改为以下内容:

public class Heap implements MyHeap{
int capacity;
int size;
Comparable[] heap;

public Heap(){
    size = 0;
    capacity = 10;
    heap = new Comparable[capacity];
}
编辑:我还注意到您的插入代码有问题。您正在使用大小计数器作为访问变量,这将不起作用,因为虽然大小可以为1,但数组的第一个位置为0。请更改为以下代码。从技术上讲,您的代码将一直起作用,直到您接近数组的末尾,这时它将真正混乱。还有您的print代码不太正确

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++;
    }
}
public void打印堆(){
对于(int i=1;i
Welp,我得到了相同的行为。我甚至将初始化更改为使用int而不是容量,我得到了相同的行为。我更新了我的答案,以修复我发现的几个错误。这可能有点说明了发生了什么,但我的程序注册的大小大于容量…是否要向其中添加多个对象你的数组?这是否与更新的插入代码一致?是的,它与更新的插入代码一致。我正在向数组中添加多个对象。我让测试程序打印大小,它为零,但程序从未在插入方法中输入条件
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++;
    }
}