我的代码在 Java 中抛出 NullPointerException
My code is throwing a NullPointerException in Java
我不知道为什么我的代码会抛出这个错误。我有一个可以容纳 maxCapacity = 100 的通用数组,如果 currentSize 达到这个数字,则 maxCapacity 会加倍。当我执行以下测试时,它抛出 NullPointerException。为什么?注意:我故意从索引 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;
}
可能是这样的:
list[++currentSize] = obj;
尝试:
list[currentSize++] = obj;
此外,您的第一个元素将始终为空。
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];
我不知道为什么我的代码会抛出这个错误。我有一个可以容纳 maxCapacity = 100 的通用数组,如果 currentSize 达到这个数字,则 maxCapacity 会加倍。当我执行以下测试时,它抛出 NullPointerException。为什么?注意:我故意从索引 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;
}
可能是这样的:
list[++currentSize] = obj;
尝试:
list[currentSize++] = obj;
此外,您的第一个元素将始终为空。
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];