我的代码需要从1
到45
的列表中随机选择6个数字。
当我运行我的代码(下面)时,输出为[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);
答案 0 :(得分:1)
问题是您要将索引值添加到随机数列表中。
更改您的代码
list2.add(index);
list.remove(index);
到
list2.add(list.remove(index));
答案 1 :(得分:0)
列出维护索引,根本不关心重复元素。为避免重复,您必须使用Set而不是List。如果在Set中有任何用户定义的类,那么不要忘记实现equals()和hashcode(),它们用于确定元素是否与HashSet等Set类重复。
如果你有原语进入Set,那么忘记重复,因为重复项将自动处理原始数据类型,如int,long等。所以我建议你使用Set而不是List。避免集合中的重复元素