import java.util.Random; import java.util.ArrayList; public class Game { ArrayList numere = new ArrayList<>(); ArrayList balls = new ArrayList(); ArrayList culori = new ArrayList<>(); Random random = new Random(); int nrBalls=0; public void createColours(){ for(int i=0;i<7;i){ culori.add(“Portocaliu”); culori.add(“Rosu”); culori.add(“Albastru”); culori.add(“Verde”); culori.add(“Negru”); culori.add(“Galben”); culori.add(“Violet”); } } public void createNumbers(){ for(int i=1;i<50;i){ numere.add(i); System.out.print(numere.size()); } } public void createBalls(){ while(nrBalls<36){ int nr =numere.get(random.nextInt(numere.size())); numere.remove(nr); String culoare =culori.get(random.nextInt(culori.size()-1)); culori.remove(culoare); balls.add(new Bila(culoare,nr)); nrBalls++; } } }
所以我有另一个带有main方法的类,在该类中我调用createNumbers(),createColours(),createBalls()。当我运行程序时,我在numere.remove(nr)处得到一个IndexOutOfBoundsException,上面写着index:数字和大小:另一个数字..总是第二个数字小于第一个数字..为什么会这样?我在哪里错?
问题在于ArrayList.remove()有两种方法,一种是Object,另一种是(int索引)。当您使用整数调用.remove时,它正在调用,.remove(int)它会删除索引,而不是对象值。
.remove(int)
为了回应评论,这里有更多信息。
该行在调用返回的索引处返回对象int nr = numere.get(random.nextInt(numere.size())的 值 。下一行numere.remove(...)尝试从ArrayList中删除该值。
int nr = numere.get(random.nextInt(numere.size())
numere.remove(...)
您可以执行以下两种方法之一:
int idx = random.nextInt(numere.size()); int nr = numere.get(idx); numere.remove(idx);
该.remove(int)方法返回对象的remove的值,您也可以执行以下操作:
int idx = random.nextInt(numere.size()); int nr = numere.remove(idx);
当然,如果需要,您可以将这两行合并为一条。