static ArrayList<Integer> usedArray = new ArrayList<Integer>();
public static void arrayContents(){
usedArray.add(2, 2);
usedArray.add(1, 1);
}
public static void app(){
Random generator = new Random ();
int randomNumber = generator.nextInt(usedArray.size());
System.out.println(usedArray);
System.out.println(randomNumber);
if(randomNumber == 2){
score();
question2();
usedArray.remove(2);
app();
}
使用
.add(2, 2)
我收到错误:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
但是使用
.add(2)
0作为数组的一部分生成,即使它不是数组中保存的值。默认情况下,数组是否总是包含0,有没有办法解决这个问题,以便0不能作为随机数生成?
答案 0 :(得分:1)
您遇到此问题,因为当您创建arraylist时它的大小为零,当您再调用usedArray.add(2, 2);
时,您尝试使用Integer 2更新arraylist中的第二个位置;但正如我所说,arraylist目前没有2号位。除非您有理由使用.add(index, object)
方法,否则只需正常添加.add(object)
usedArray.add(2, 2); //<-- here you update slot 2, putting Integer 2 in it, there is no slot 2 at this point
如果这只是一个可用的随机数列表,您可以使用;
usedArray.add(1);
usedArray.add(2);
现在,数字1和2在arraylist中可用。
然后可以从arraylist中随机获取这些内容:
int randomNumber = usedArray.get(generator.nextInt(usedArray.size()));
在此示例中,generator.nextInt(usedArray.size()
将生成数字0或1,它将分别从arraylist中获取1或2
答案 1 :(得分:0)
您遇到的问题是您创建了一个空的List
输入new ArrayList<Integer>()
。
您不能使用add(int index, E element),因为它的
将指定元素插入此列表中的指定位置。
对于长度等于0
的列表,会发生异常。
当您使用add(E e)
时。
将指定的元素追加到此列表的末尾。
正如Ted Hopp在评论中指出的那样
问题是您无法插入列表的当前末尾。
这意味着您可以使用add(int index, E element)
,仅当索引比大小更友好时才使用int random = new Random().nextInt(list.size());
。
此外,当您致电
时 list.size()
然后结果介于0(包括)和{{1}}之间(不包括)。这意味着您将始终获得一些有效的索引,而您不必担心订单。
答案 2 :(得分:0)
在您的代码中,您已从列表中删除了第二个位置并尝试更新它。这就是你获得AIOBE的原因。使用add()或尝试增加列表大小。