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

Java的随机类行为澄清

姜阳
2023-03-14

目前,在单元测试中,我有一个循环可以循环到1000次,如果分数没有更新,那么我假设这个数字可以连续滚动1000次,这是不可能的!不过,我凭空选择了1000这个数字。我想根据Java的随机类的实际行为选择一个更准确的数字。

从读到它所说的API时,它说它是“一个线性同余伪随机数生成器..”。我试图确定的是,基于它使用一个48位,是否有几次相同的值是不可能重复的。例如。在我的场景中,数字1-6可以生成,是不是不可能连续得到20多次相同的数字,例如6?如果有人知道的话,我在找那些信息。

更新--我会让问题更简单。对于Java random类,如果我调用nextInt(6),我有多少次可能连续收到相同的结果。例如。在数学上,基于48位种子和随机类html" target="_blank">算法的工作方式,是否有一个限制?我想要一个这样的答案,例如:“得到相同的结果绝对不可能超过X次”,其中X是我的答案。

共有1个答案

唐健
2023-03-14

根据文档,random使用的PRNG只有248不同的状态。因此,使用nextint(6)生成的数字序列以最多248的周期重复。

我们可以假设所有6种可能的结果最终都是独立于种子值生成的,否则,生成器的质量非常糟糕。因此,必须有一个极限X<248来满足“绝对不可能得到超过X次的相同结果”。

然而,要找到最小的这样的X并不是一件容易的事。蛮力法将生成248成功数并进行校验。

 类似资料:
  • 我正在尝试模拟我在上面发现的数学难题http://blog.xkcd.com/2010/02/09/math-puzzle/.然而,java random类返回了奇怪的结果。在下面的代码中,结果是预期的。第一行的输出大约为.612,第二行的输出介于.49和.51之间。int试验=10000000;int成功=0; 然而,当我切换 到 第一个数字的输出约为 .476,第二个数字的输出约为 .710。

  • 我正在创建一个这样的流程实例: 它总是返回一个processInstance,但有时(看似随机)返回的流程实例在数据库中不存在: 我还记录了Mariadb查询,我注意到实例不存在的时间;数据库中没有记录插入查询,因此没有插入流程实例,然后删除。 这些问题在迁移到activiti6后开始出现。此外,我正在使用activiti spring boot starter basic

  • 问题内容: 当他每次运行程序时都不断获得相同的数字时,我试图向Java解释随机数生成器。我为同一件事创建了自己的简单版本,每次运行该程序时,我也得到了与他得到的确切数字相同的数字。 我究竟做错了什么? 100个数字中的最后五个数字是: 问题答案: 您已经为随机数生成器提供了恒定的值。它是确定性的,因此每次运行都会生成相同的值。 我不确定您为什么选择使用作为种子,但是种子值与生成的值范围无关(这是由

  • 但是,一旦我们更改命令(更改位置fontfile=with text= 我得到以下错误 [Parsed_drawtext_0@02d88a80]无法加载字体“C”:无法找到匹配的字体

  • 问题内容: 我正在尝试在Java中生成盐,以与用于安全密码存储的哈希算法配合使用。我正在使用以下代码创建随机盐: 这应该生成一个完全安全的,随机生成的盐,以用于我的哈希算法。但是,当我运行代码时,每次都会输出相同的盐…表示生成的盐根本不是随机的。 出于明显的安全性目的,每个用户都需要一个唯一的符号,但是如果我每次创建一个新帐户时都使用此代码,则每个用户都将具有相同的符号,这一开始就破坏了它的用途。

  • Java常用的库包括和(我还看到)。还有其他人吗?我什么时候用每一个?有时我使用只是为了对我的简单数字感觉更好。事实证明,实际上允许您选择生成器。我该如何和什么时候使用这个? 最后,Java8提供了。我不知道这是什么,但它比以前的任何一个都要慢得多。应该如何以及何时使用?还有,慢是不是因为噪声源快用完了?