当前位置: 首页 > 知识库问答 >
问题:

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

楚良平
2023-03-14

我正在尝试研究如何将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);

共有2个答案

祁嘉瑞
2023-03-14

这是因为 Generated LotteryNumbers 是一个 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 方法返回的布尔值,成功添加 TRUE,如果重复,则添加 FALSE

简培
2023-03-14

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());
 类似资料:
  • 我是JAVA新手,我想我已经搜索了所有的问题,没有找到一个与我的问题相似的。 我想使用Math.random()生成随机数,以返回4个固定数。我想要得到的数字是:0、90、180和270。换句话说,我想要4个最小值为0、最大值为270、增量为90的数字。

  • 如何使随机数发生器不重复数字?我试过这个,但它总是重复给我数字

  • 问题内容: 最重要的答案是建议使用switch语句来完成这项工作。但是,如果我要考虑的情况很多,那么代码看起来就很笨拙。我有一个巨大的switch语句,在每种情况下都一遍又一遍地重复非常相似的代码。 当您要考虑的概率很大时,是否有更好,更干净的方法来选择具有一定概率的随机数?(例如〜30) 问题答案: 这是一个Swift实现,受各种答案的影响很大,这些答案会生成具有给定(数字)分布的随机数 对于

  • random 生成随机数包 文档:https://www.npmjs.com/package/random 安装:npm install --save random 封装代码: app / extend / context.js // 导入 jwt const jwt = require('jsonwebtoken') // 导入随机数包 const random = require('rando

  • 问题 你需要生成在一定范围内的随机数。 解决方案 使用 JavaScript 的 Math.random() 来获得浮点数,满足 0<=X<1.0 。使用乘法和 Math.floor 得到在一定范围内的数字。 probability = Math.random() 0.0 <= probability < 1.0 # => true # 注意百分位数不会达到 100。从 0 到 100 的范围实

  • 我有一个数字列表,比如 在实际代码中,这是从数据库生成的,所以这个数组最多可以容纳500个彼此不同的数字。 数据库中的每个数字都有发生的概率。所以我有一个以前执行的数据来生成从1到500的随机数,并记录了每个数生成1000次的概率。 现在有了数字列表和每个数字的概率,我想写一个函数,根据这些500个数字的概率,从中生成一个随机数。 例如: 所以变量$finallist看起来像这样: 现在,如果我运