我的代码在Java中抛出NullPointerException

时间:2015-02-21 15:35:41

标签: java arrays generics nullpointerexception

我不知道为什么我的代码会抛出此错误。我有一个可以保持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;
        }

2 个答案:

答案 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;

此外,您的第一个元素将始终为空。