尝试打印出整个数组时出现ArrayIndexOutOfBoundsException

时间:2019-02-04 16:48:48

标签: java

我在一个类中有三个arraylist(int,字符串和另一个字符串)。在另一个类中,遍历所有三个的代码如下所示:

public class ArrayContainer<T> implements ArrayContainerInterface<T> {
private T[] container;
private int defaultSize = 25;
private int numItems;

public ArrayContainer() {
    container = (T[]) new Object[defaultSize];
    numItems =0;
}

@Override
public void add(T item) {

    if (numItems < defaultSize) 
    { 
        container[++numItems] = item;

    } 


}

@Override
public boolean isFull() {
    return false;
}

@Override
public String toString() {
    String output = new String();
    for (int i=0; i < defaultSize; i++) {
        output += container[i];
    }

    return output;  
  }
}

我得到的堆栈跟踪如下:

null01234567891011121314151617181920212223
The number container object is NOT full!
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 25
at ArrayContainer.add(ArrayContainer.java:17)
at ArrayContainerDriver.main(ArrayContainerDriver.java:31)

我的代码到底有什么错,给我这样的错误?

指向我的GitHub和my classes are here其余部分的链接

1 个答案:

答案 0 :(得分:2)

正如史蒂夫(Steve)在评论中所写,您需要进行以下更改:

container[++numItems] = item;

container[numItem++] = item

原因是使用++numItems首先增加numItems,然后添加该项。这将导致超出范围的异常,因为在最后一项上,您将其添加到第25位(超出数组大小)