使用种子的Java随机数

这是我的代码,使用种子作为参数来生成随机数:

double randomGenerator(long seed) {

Random generator = new Random(seed);

double num = generator.nextDouble() * (0.5);

return num;

}

每次我提供种子并尝试生成100个数字时,它们都是相同的。

我怎样才能解决这个问题?

7个解决方案

73 votes

如果您给相同的种子,那是正常的。 这是允许测试的重要功能。

选中此选项可了解伪随机生成和种子:

伪随机数发生器

伪随机数生成器(PRNG),也称为确定性 随机位发生器DRBG,是一种用于产生序列的算法 近似于随机数属性的数。 的 序列不是真正随机的,因为它完全由 相对较小的一组初始值,称为PRNG的状态, 其中包括真正的随机种子。

如果要具有不同的序列(通常在不调整或调试算法时使用),则应调用零参数构造函数,该构造函数使用nanoTime尝试每次获取不同的种子。 当然,此Random实例应保留在您的方法之外。

您的代码可能应该是这样的:

private Random generator = new Random();

double randomGenerator() {

return generator.nextDouble()*0.5;

}

Denys Séguret answered 2020-07-12T12:24:02Z

21 votes

简单的方法是使用:

Random rand = new Random(System.currentTimeMillis());

这是生成Random数字的最佳方法。

Pollar answered 2020-07-12T12:24:27Z

11 votes

您不应该在方法范围内创建新的Random。 使其成为班级成员:

public class Foo {

private Random random

public Foo() {

this(System.currentTimeMillis());

}

public Foo(long seed) {

this.random = new Random(seed);

}

public synchronized double getNext() {

return generator.nextDouble();

}

}

这仅仅是一个例子。 我认为这样包装Random不会增加任何价值。 将其放在正在使用的类中。

duffymo answered 2020-07-12T12:24:51Z

6 votes

这就是伪RNG的原理。 这些数字并不是真正随机的。 它们是使用确定性算法生成的,但是根据种子的不同,生成数字的顺序也会有所不同。 由于您始终使用相同的种子,因此始终获得相同的序列。

JB Nizet answered 2020-07-12T12:25:11Z

2 votes

问题在于您再次为随机生成器添加了种子。 每次播种时,都会重置随机数生成器的初始状态,并且生成的第一个随机数将是初始状态之后的第一个随机数

Minion91 answered 2020-07-12T12:25:31Z

2 votes

如果要使用一个种子生成多个数字,可以执行以下操作:

public double[] GenerateNumbers(long seed, int amount) {

double[] randomList = new double[amount];

for (int i=0;i

Random generator = new Random(seed);

randomList[i] = Math.abs((double) (generator.nextLong() % 0.001) * 10000);

seed--;

}

return randomList;

}

如果使用相同的种子,它将显示相同的列表。

user5479540 answered 2020-07-12T12:25:56Z

1 votes

这里的几个示例创建了一个新的ThreadLocalRandom实例,但这不是必需的。 也没有理由像一种解决方案一样使用synchronized。 相反,请利用ThreadLocalRandom类上的方法:

double randomGenerator() {

return ThreadLocalRandom.current().nextDouble(0.5);

}

Finn answered 2020-07-12T12:26:18Z

java随机数种子_使用种子的Java随机数相关推荐

  1. 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏

    对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...

  2. java风控_【A0538】[java视频教程]金融信贷风控的机器学习实战视频教程 it教程

    Java视频教程名称:金融信贷风控的机器学习实战视频教程  java自学   风控视频教程   it教程 7 E" b1 z7 `/ _& G百度网盘下载链接:8 }, g4 o5 ...

  3. 我的世界java路径_我的世界java路径在哪 路径有误怎么设置

    我的世界的各个版本中java都是十分重要的东西,许多玩家都会遇到Java路径有误的问题,并且不知道该如何解决,其实Java的路径这个东西在每个人的电脑中都是不太一样的,一般以你安装时的位置为准,在这里 ...

  4. 如何创建第一个java程序_创建第一个java程序

    开发环境:ubuntu 10.04 + eclipse 方法一:打开eclipse编译器,选择 File->New->Java project,输入工程名称,点击finish,在工程目录中 ...

  5. 常用的java虚拟机_带你了解 JAVA虚拟机 面试必备

    Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途.创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有 些区域则是依赖 ...

  6. vs java调试_基于VSCode的Java编程语言的构建调试环境搭建指南(作业三)

    1.Java编译环境的搭建(CodeRunner) CodeRunner的强大之处在于它支持许多语言,只要选好语言,就直接可以写代码,即开即用的模式.时至今日,Code Runner已经有了超过400 ...

  7. java 精通_你真的精通Java吗?

    简历和自我介绍上经常能够读到"精通Java"这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点.不能给自己加分了.可是事实真是这样吗? 对于语言的学习,我有一 ...

  8. java相册_精致小巧的java相册制作方法

    本文实例为大家分享了java相册制作方法,供大家参考,具体内容如下 注: 1)html上的图片是静态指定的.当更新了新的图片时必须手工更新.所以使用Servlet读取本地images中的所有图片,动态 ...

  9. java内核_测量时间:从Java到内核再到

    java内核 问题陈述 当您深入研究时,即使是最基本的问题也会变得很有趣. 今天,我想深入研究一下Java时间. 我们将从Java API的最基础知识开始,然后逐步降低堆栈:通过OpenJDK源代码g ...

  10. java基准测试_星期五基准功能Java

    java基准测试 让我们的产品所有者有一天变得疯狂,并要求您执行以下操作: From a set of Strings as follows : " marco_8"," ...

最新文章

  1. C语言程序设计 细节总结(第9章 结构体共用体枚举)
  2. 开发日记-20190521 关键词 bash的几个初始化文件
  3. 《编译与反编译技术实战》——第2章编译器实践概述
  4. BZOJ - 3578: GTY的人类基因组计划2
  5. VTK:隐式二次元用法实战
  6. fis3 php cgi,FIS3 : 构建
  7. 8月13日见!三星Note 20国行版官宣:唯一悬念只剩价格
  8. php基础编程教程 pdf,手把手教你编程打印出PDF_PHP教程
  9. Linux中,根目录下文件夹的含义
  10. tomcat的server.xml中的Context节配置
  11. 【STM32H7】第5章 ThreadX NetXDUO网络协议栈介绍
  12. oracle分区详解
  13. 华为笔记本换装linux双系统,华为及荣耀笔记本装Deepin双系统不能引导Windows的解决...
  14. 金彩教育:店铺中的人才布局
  15. 安卓Bmob后端云的使用(增删改查、上传图片、推送服务等)
  16. MATLAB随机森林回归模型
  17. 卫星图像地物判别标志(假彩色)
  18. facebook使用教程_您可以在Facebook上使用假名吗?
  19. 4.怎么理解相互独立事件?真的是没有任何关系的事件吗? 《zobol的考研概率论教程》
  20. 【人工智能 Open AI】设计一个SQL Where DSL模型,使用 golang 代码来实现DSL的翻译成SQL。

热门文章

  1. win7桌面小工具 html5,Win7桌面小工具打不开怎么办
  2. 运筹学 知识点总结 (十一)
  3. c语言常量ascii码表,C语言常用转义符和ASCII码表
  4. 生物医学信号检测与处理实验3——1微电阻梁
  5. maven下载及安装教程(保姆及教程)
  6. live2dmesh渲染优先级_如何渲染Live2D模型
  7. 双线性对在密码学中的应用(上)
  8. Leetcode学习成长记:天池leetcode基础训练营Task01数组
  9. svn汉化包安装后无效果
  10. 【学习笔记】dubbo 控制台的部署