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

时间:2016-11-29 03:26:35

标签: java random hashset

我正在尝试找出如何将6个随机生成的数字添加到HashSet中。我得到的结果却不一致。有时它会向控制台输出6个数字,有时则会向控制台输出5个数字。

我今天早上才对这些东西感到陌生,所以如果它显而易见,我会道歉并感谢你的帮助。

http.Get

2 个答案:

答案 0 :(得分:3)

这是因为GeneratedLotteryNumbersHashSet(其作用类似于集合)并且java中的HashSet不会插入已存在于其中的项目,因此不会t允许重复,所以如果你得到少于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(如果重复)。

答案 1 :(得分:3)

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());

after insert