当我尝试向数组添加值时出现 java.lang.NullPointerException

标签 java arrays dynamic

我有一个任务是在不使用任何 ArrayList 或 java 中的数组的其他预制类的情况下制作我自己的动态数组。 当我尝试添加我的对象(例如它是 Integer)时,出现 Exception in thread "main"java.lang.NullPointerException 错误。

Dinaminis<Integer> array = new Dinaminis<>();
array.ideti(5);

我的 Dinaminis 类看起来像这样:

public class Dinaminis<T> implements DArray<T> 
{    
    private Object[] array;
    private int kiek;
    private Object[] temp;

    public Dinaminis() {
        array = new Object[10];
        kiek = 0;
    }

    @Override
    public void ideti(Object o) {
        if (array.length == kiek) {
            temp = new Object[kiek*2];
        }
        for (int i=1; i < kiek; i++){
            temp[i] = array[i];
        }
        array = temp;
        array[kiek] = o;
        kiek++;
    }
}

问题是当我想使用“ideti”方法时,我想检查数组是否已满,如果已满,则应该创建一个双倍大小的数组。但是我什至在我的数组已满之前就收到错误消息。

最佳答案

你的ideti方法是错误的。这应该有效:

public void ideti(Object o) {
    if (array.length == kiek) {
        temp = new Object[kiek*2];
        // only copy old array to new array when old one is full
        for (int i=0; i < kiek; i++){ // index starts at 0, not 1
            temp[i] = array[i];
        }
        array = temp;
    } 
    array[kiek] = o;
    kiek++;
}

你的问题是,即使原始数组未满,也会执行将旧数组复制到新数组的循环,在这种情况下 temp 未初始化,这导致 NullPointerException

关于当我尝试向数组添加值时出现 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212421/

相关文章:

c# - 如何在 C# 中将 Button 的类型设置为 "Button"(与默认的 "Submit"相对)?

java - PCF 应用程序到应用程序 Oauth 2 grant_type = 'client_credentials' 和范围 uaa.resources。本地测试

java - 在执行长程序期间动态更新 JTextArea 作为控制台输出?

Java 等同于 C# 动态类类型?

javascript - 输入整数的总和

arrays - 快速将两个不同数组的元素合并到字典中

算法 - 最小化方程

java - 作为内部类的事件适配器

c++ - 如何正确重载 '=' 运算符以使用重载 '[ ]' 运算符的数组?

javascript - getElementById 具有用于 onclick 更改图像的动态 ID