我有一个任务是在不使用任何 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/