0
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 不能作为随机数生成?

4

3 回答 3

1

您遇到此问题是因为当您创建数组列表时它的大小为零,然后当您调用时,usedArray.add(2, 2);您试图用整数 2 更新数组列表中的第二个位置;但正如我所说,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 中可用。

然后可以从数组列表中随机获取这些:

int randomNumber = usedArray.get(generator.nextInt(usedArray.size()));

在此示例generator.nextInt(usedArray.size()中将生成数字 0 或 1,这将分别从 arraylist 中获取 1 或 2

于 2013-10-16T17:21:07.620 回答
0

在您的代码中,您已从列表中删除了第二个位置并尝试对其进行更新。这就是您获得 AIOBE 的原因。使用 add() 或尝试增加列表大小。

于 2013-10-16T17:20:01.447 回答
0

您遇到的问题是您创建了一个空的Listtyping new ArrayList<Integer>()

您不能使用add(int index, E element)因为它

在此列表中的指定位置插入指定元素。

对于您的列表长度等于0异常发生。

当你使用add(E e)它时。

将指定元素附加到此列表的末尾。

正如特德霍普在评论中指出的那样

问题是您不能插入到列表的当前末尾之外。

这意味着您可以使用add(int index, E element),仅当索引比大小更喜欢时。

另外当你打电话时

int random = new Random().nextInt(list.size());

然后结果介于 0(含)和list.size()(不含)之间。这意味着您将始终得到一些有效的索引,并且您不必担心顺序。

于 2013-10-16T17:16:40.517 回答