从java中的ArrayList生成一个不包括0的随机数

时间:2013-10-16 17:14:57

标签: java arraylist indexing int

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

3 个答案:

答案 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()或尝试增加列表大小。