【问题标题】:Array not initializing properly数组未正确初始化
【发布时间】:2014-03-08 17:02:24
【问题描述】:

我正在尝试使用 int 来初始化 Comparable 数组以确定初始化数组的大小。但是,在我初始化数组后,数组为空。如果我尝试将东西添加到数组中,我会得到一个 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 容量的值,并且该数组仍然为空并且具有空长度。我什至使用 int 作为参数而不是变量容量来初始化数组,我得到了相同的行为。

【问题讨论】:

    标签: arrays nullpointerexception initialization


    【解决方案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++;
        }
    }
    

    【讨论】:

    • Welp,我得到了同样的行为。我什至将初始化更改为使用 int 而不是容量,并且得到了相同的行为。
    • 我更新了我的答案以修复我发现的更多错误。
    • 嗯,这可能有点说明发生了什么,但我的程序将大小注册为大于容量......
    • 您是否要向数组中添加多个对象?这甚至与更新的插入代码?
    • 是的,它带有更新的插入代码。我正在向数组中添加多个对象。我让我的测试程序打印大小,它是零,但程序从不进入插入方法中的条件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2020-04-21
    • 2012-06-17
    相关资源
    最近更新 更多