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