我正在尝试找出如何将6个随机生成的数字添加到HashSet中。我得到的结果却不一致。有时它会向控制台输出6个数字,有时则会向控制台输出5个数字。
我今天早上才对这些东西感到陌生,所以如果它显而易见,我会道歉并感谢你的帮助。
http.Get
答案 0 :(得分:3)
这是因为GeneratedLotteryNumbers
是HashSet
(其作用类似于集合)并且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
方法返回的boolean
,TRUE
已成功添加,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