随机数生成器给出不一致的结果
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
方法返回的boolean
,TRUE
添加成功,如果重复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());
我正在研究如何将 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
方法返回的boolean
,TRUE
添加成功,如果重复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());