循环的大小打印的数字比我想在我的JAVA集中打印的要少



基本上我想生成1-10之间的随机数,这些随机数被放入我的集合中。问题是,我的循环大小是从0到9,它会生成随机数,但一旦是5个数字,一次是7个数字,还有一次是3个数字,而不是9个数字。为什么?

private static Set<Integer> losowanie() {

Set<Integer> result = new TreeSet<>();
Random random = new Random();
for (int i = 0; i < 10; i++){
result.add(random.nextInt(10) + 1);
}
return result;
}
}

我也在while循环中做同样的事情,它也做同样的事。

因为Set集合不能有重复的属性,也就是说,当你生成数字时,如果在随机数中生成了相同的数字,那么你的Set只能保存一个唯一的数字。

public static void main(String[] args) {
Set<Integer> result=new TreeSet<>();
for (int i = 0; i < 10; i++) {
result.add(1);
}
//only one data: [1]
System.out.println(result);
result=new TreeSet<>();
for (int i = 0; i <10 ; i++) {
result.add(i);
}
//ten data:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
System.out.println(result);
}

首先,循环索引从0到9,这是十次迭代。

所以,你可能会期望你的集合中有十个数字。但是集合元素必须是唯一的,并且您正在插入从仅有十种可能性的集合中随机选择的元素。

发生这种情况的几率是10!÷1010或约0.036%。继续运行您的程序。

如果你的目标是随机排列十个不同的数字,那么就这样做:

List<Integer> result = IntStream.rangeClosed(1, 10)
.boxed()
.collect(Collectors.toList());
Collections.shuffle(random);

最新更新