我在一个类中有三个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其余部分的链接
答案 0 :(得分:2)
正如史蒂夫(Steve)在评论中所写,您需要进行以下更改:
container[++numItems] = item;
到
container[numItem++] = item
原因是使用++numItems
首先增加numItems,然后添加该项。这将导致超出范围的异常,因为在最后一项上,您将其添加到第25位(超出数组大小)