我如何在java中为40个男孩和50个女孩分配90个座位而不重复

时间:2017-06-14 14:38:06

标签: java

  public static void main(String[] args){
        int size = 90;

        ArrayList<Integer> list = new ArrayList<Integer>(size);
        for(int i = 1; i <= size; i++) {
            list.add(i);
        }

        Random rand = new Random();
        while(list.size() > 0) {
            int index = rand.nextInt(list.size());
            System.out.println("BOY: "+list.remove(index));
            System.out.println("Girl: "+list.remove(index));
        }
    }
}

以下是我所做的,并且仍在线程“main”java.lang.IndexOutOfBoundsException: Index: 45, Size: 45.中获得Exception 我该怎么做才能解决这个问题。

3 个答案:

答案 0 :(得分:1)

一般算法是将男孩和女孩放入一个列表,然后使用Collections.shuffle(arrayList); 随机化订单。

 之后,您只需为您指定的每个座位拨打list.remove(0)

答案 1 :(得分:1)

对于当前的代码,你必须为一个男孩随机获得一个随机的女孩。

错误是因为如果random给出了列表的大小,那么您将尝试删除最后一个元素两次。

现在,您的代码将为您提供45个女孩席位和45个男孩席位。要解决它,请在while

中使用两个if语句
       if(list.size()>10){
//get a random for a boy and then a random for a girl
}else{
//get a random for a girl
}

答案 2 :(得分:0)

  

java.lang.IndexOutOfBoundsException: Index: 45, Size: 45

原因是您正在访问45列表大小的索引45。从列表中随机删除元素时,列表大小会减小。因此,每次运行程序时,Index: 45, Size: 45都会发生变化。

作为解决方案,您可以更改:

int index = rand.nextInt(list.size());

要:

int index = rand.nextInt(list.size()-1);

以上行将从列表大小中随机化一个值。