从ArrayList中删除整数IndexOutOfBoundsException

时间:2016-04-14 16:34:03

标签: java arraylist

PublicClass

所以我有另一个带有main方法的类,在那个类中我调用createNumbers(),createColours(),createBalls()。当我运行程序时,我在numere.remove(nr)得到一个IndexOutOfBoundsException说索引:一个数字和大小:另一个数字..总是第二个数字小于第一个数字。为什么会发生这种情况?我错在哪里?

3 个答案:

答案 0 :(得分:2)

问题是ArrayList.remove()有两个方法,一个是Object,另一个是(int index)。当您使用整数调用.remove时,它调用.remove(int)来删除索引,而不是对象值。

在回复评论时,这里有更多信息。

int nr = numere.get(random.nextInt(numere.size())返回调用返回的索引处对象的。下一行numere.remove(...)尝试从ArrayList中删除值。

您可以采取以下两种方式之一:

int idx = random.nextInt(numere.size());
int nr = numere.get(idx);
numere.remove(idx);

.remove(int)方法返回删除对象的值,您也可以这样做:

int idx = random.nextInt(numere.size());
int nr = numere.remove(idx);

当然,如果需要,您可以将这两行合并为一行。

答案 1 :(得分:1)

numere - ArrayList只包含1到49个整数。

numere.remove(NR); - 这里nr可以是整数范围内的任何数字。因为它是由随机函数创建的。所以这是一个错误。你只能删除arraylist中的元素。 else程序会抛出异常

答案 2 :(得分:0)

remove(int)将删除给定索引处的元素,而不是等于给定值的元素。并且它还会返回已删除的元素,因此您只需执行以下操作:

int nr = numere.remove(random.nextInt(numere.size()));

你可以为你的culoare做同样的事情:

String culoare = culori.remove(random.nextInt(culori.size()));

请注意,如果参数为零(如果列表为空),Random.nextInt(int)将抛出异常。