1

我的代码需要从 到 的列表中随机选择 6 个1数字45

有一次,当我运行我的代码(如下)时,输出是 [4, 4, 17, 18, 27, 37]. 我没想到输出中有任何重复。怎么可能有重复?我的代码应该在list选择它们时从中删除数字。

    Random rng = new Random(); 
    int size = 45;
    int sixList[] = new int[6];
    ArrayList<Integer> list = new ArrayList<Integer>(size);
    ArrayList<Integer> list2 = new ArrayList<Integer>(6);
    for(int i = 1; i <= size; i++) {
        list.add(i);
    }
    Random rand = new Random();
    for(int i = 0; list.size() > 39; i++){
        int index = rand.nextInt(list.size());
        if (index == 0){
            index = rand.nextInt(list.size());
            list2.add(index);
            list.remove(index);
        }else{
            list2.add(index);
            list.remove(index);
        }
    }
    Collections.sort(list2);
    System.out.print(list2);
4

2 回答 2

1

问题是您将索引值添加到随机数列表中。

更改您的代码

list2.add(index);
list.remove(index);

list2.add(list.remove(index));
于 2013-03-21T18:00:10.483 回答
0

List 维护索引,根本不关心重复元素。为避免重复,您必须使用 Set 而不是 List。如果您在 Set 中有任何用户定义的类,那么不要忘记实现 equals() 和 hashcode(),它们用于确定元素是否由 Set 类(如 HashSet)重复。

如果您的 Set 中有原语,那么请忘记重复,因为对于 int、long 等原始数据类型将自动处理重复。所以我建议您使用 Set 而不是 List。避免集合中的重复元素

于 2013-03-21T17:58:48.643 回答