随机数生成器给出不一致的结果

Random number generator giving inconsistent results

我正在研究如何将 6 个随机生成的数字添加到 HashSet。我得到了结果,但它们不一致。有时它会向控制台打印 6 个数字,有时它会向控制台打印 5 个数字。

我今天早上才开始接触这些东西,所以如果它很明显,我深表歉意,谢谢你的帮助。

 HashSet<Integer> generatedLotteryNumbers = new HashSet<Integer>();
Random r = new Random();

for(int i=0; i<6; i++){
  generatedLotteryNumbers.add(r.nextInt(49));
}

System.out.println(generatedLotteryNumbers);

这是因为 GeneratedLotteryNumbers 是一个 HashSet(就像一个集合)并且 java 中的 HashSet 不会插入已经存在的项目在其中,因此不允许重复,所以如果你得到的元素少于 6 个,那是因为一些元素是常见的,因此只存储一次。

最好试试这个:

ArrayList<Integer> GeneratedLotteryNumbers = new ArrayList<Integer>();
Random r = new Random();
for(int i=0; i<6; i++){
    GeneratedLotteryNumbers.add(r.nextInt(49));
}

要检测重复项的插入,捕获Set::add方法返回的booleanTRUE添加成功,如果重复FALSE

A Set 不能包含重复值,因此如果生成器两次生成相同的数字,它将被删除。相反,您应该根据 Set 的大小进行循环(或使用 List):

while (generatedLotteryNumbers.size() < 6) {
    generatedLotteryNumbers.add(r.nextInt(49));
}

如果您使用 Java 8,另一种选择是使用 Random#ints 生成一个 Stream,您可以使用它直接创建您的 Set

Set<Integer> generatedLotteryNumbers = r.ints(0, 49)
                                        .distinct()
                                        .limit(6)
                                        .boxed()
                                        .collect(Collectors.toSet());