我不知道为什么我的代码会抛出此错误。我有一个可以保持maxCapacity = 100的通用数组,如果使用currentSize达到这个数,则maxCapacity加倍。当我执行以下测试时,它会抛出NullPointerException。为什么?注意:我从INDEX 1(非0)开始打算!!!!
测试:
for(int i=1; i <= 1100; i++)
list.addLast(i);
System.out.println("Should print 1 .. i");
for(int x : list)
System.out.print(x + " ");
System.out.println("\n");
这是我的代码:
private E[] list;
private int maxCapacity, currentSize;
public ArrayLinearList(){
currentSize = 0;
maxCapacity = DEFAULT_MAX_CAPACITY;
list = (E[]) new Object[maxCapacity];
//list[0] = null;
}
public void addLast(E obj){
if(isFull()) //check if maxCap has been reached first
doubleArraySize();
System.out.println("Method called");
if(currentSize == maxCapacity - 1)
doubleArraySize();
list[++currentSize] = obj;
}
....
private boolean isFull(){
if(currentSize == maxCapacity)
return true;
return false;
}
private void doubleArraySize(){
maxCapacity *= 2;
System.out.println("doubling");
E[] valuesHolder = (E[]) new Object[maxCapacity];
for(int i = 1; i <= currentSize; i++)
list[i] = valuesHolder[i];
list = valuesHolder;
}
答案 0 :(得分:2)
for(int i = 1; i <= currentSize; i++)
list[i] = valuesHolder[i];
这部分是罪魁祸首。您必须将'list'的内容复制到新创建的数组'valuesHolder'。相反,你正在做另一种方式,这导致'null'条目。您必须做出的改变是:
for(int i = 1; i <= currentSize; i++)
valuesHolder[i] = list[i];
答案 1 :(得分:-1)
可能是这样的:
list[++currentSize] = obj;
尝试:
list[currentSize++] = obj;
此外,您的第一个元素将始终为空。