我的代码在 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];