小编典典

从ArrayList中删除整数IndexOutOfBoundsException [重复]

java

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:数字和大小:另一个数字..总是第二个数字小于第一个数字..为什么会这样?我在哪里错?


阅读 242

收藏
2020-11-26

共1个答案

小编典典

问题在于ArrayList.remove()有两种方法,一种是Object,另一种是(int索引)。当您使用整数调用.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)方法返回对象的remove的值,您也可以执行以下操作:

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

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

2020-11-26