首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确生成随机数

正确生成随机数
EN

Stack Overflow用户
提问于 2014-12-02 15:06:36
回答 3查看 178关注 0票数 2

我想对我处理的每一个物体都有5个随机数。我处理许多对象(分别),并需要确保在所有数字中都实现了随机性。如果我处理5个对象,我将有25个随机数:

代码语言:javascript
复制
         RN1 RN2 RN3 RN4 RN5
Object 1   1   2   3   4   5
Object 2   6   7   8   9  10
Object 3  11  12  13  14  15
Object 4  16  17  18  19  20
Object 5  21  22  23  24  25

问题如下:

  • 对于单个对象,如果使用当前时间(以毫秒为种子)为每个单个数字创建随机数生成器,还是创建一个随机数生成器,并使用nextDouble从随机性质量方面获得一系列数字,会有什么区别吗?
  • 一旦我处理了多个对象,并获得了所有对象的所有第一随机数,这些随机数是否会形成均匀的随机分布(例如,数字1、6、11、16、21),还是会以某种方式被打破?

我的观点是,最好只创建一个随机数生成器(由所有对象共享),这样每当需要新的随机数时,我就可以调用nextDouble()并按随机数顺序获得下一个数字。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-02 15:12:46

查看一下来自Java的ThreadLocalRandom类。

它提供了统一的分布,避免了瓶颈,因为每个线程都有自己的副本。

对于他们有不同的序列,这一切都是关于改变他们的种子。在这种情况下,一个常见的做法是查看带有线程/任务/进程标识符的生成器。

票数 3
EN

Stack Overflow用户

发布于 2014-12-02 15:12:24

·对于单个对象,如果使用当前时间(以毫秒为种子)为每个单个数字创建随机数生成器,还是创建一个随机数生成器,并使用nextDouble从随机性质量方面获得一系列数字,会有什么区别吗?

不要用当前时间作为每个数字的种子。生成的时间少于当前时间的分辨率(毫秒)。

票数 1
EN

Stack Overflow用户

发布于 2014-12-03 15:17:09

最安全的方法可能是初步生成所需的随机数,将其保存到数组中,并建立访问顺序规则。这样,您就可以完全控制流程。也没有“失去随机性”。

否则,如果您一次启动多个生成器,它们很可能会带有相同的值(默认情况下是系统时间),如果您使用由不同线程同时访问的单个生成器,则需要传递一个Random类的对象,这个对象可能很好,但也可能导致可再现性的损失(我不确定这在您的情况下是否至关重要)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27252557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档