java随机数种子_使用种子的Java随机数
使用种子的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随机数相关推荐
- 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏
对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...
- java风控_【A0538】[java视频教程]金融信贷风控的机器学习实战视频教程 it教程
Java视频教程名称:金融信贷风控的机器学习实战视频教程 java自学 风控视频教程 it教程 7 E" b1 z7 `/ _& G百度网盘下载链接:8 }, g4 o5 ...
- 我的世界java路径_我的世界java路径在哪 路径有误怎么设置
我的世界的各个版本中java都是十分重要的东西,许多玩家都会遇到Java路径有误的问题,并且不知道该如何解决,其实Java的路径这个东西在每个人的电脑中都是不太一样的,一般以你安装时的位置为准,在这里 ...
- 如何创建第一个java程序_创建第一个java程序
开发环境:ubuntu 10.04 + eclipse 方法一:打开eclipse编译器,选择 File->New->Java project,输入工程名称,点击finish,在工程目录中 ...
- 常用的java虚拟机_带你了解 JAVA虚拟机 面试必备
Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途.创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有 些区域则是依赖 ...
- vs java调试_基于VSCode的Java编程语言的构建调试环境搭建指南(作业三)
1.Java编译环境的搭建(CodeRunner) CodeRunner的强大之处在于它支持许多语言,只要选好语言,就直接可以写代码,即开即用的模式.时至今日,Code Runner已经有了超过400 ...
- java 精通_你真的精通Java吗?
简历和自我介绍上经常能够读到"精通Java"这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点.不能给自己加分了.可是事实真是这样吗? 对于语言的学习,我有一 ...
- java相册_精致小巧的java相册制作方法
本文实例为大家分享了java相册制作方法,供大家参考,具体内容如下 注: 1)html上的图片是静态指定的.当更新了新的图片时必须手工更新.所以使用Servlet读取本地images中的所有图片,动态 ...
- java内核_测量时间:从Java到内核再到
java内核 问题陈述 当您深入研究时,即使是最基本的问题也会变得很有趣. 今天,我想深入研究一下Java时间. 我们将从Java API的最基础知识开始,然后逐步降低堆栈:通过OpenJDK源代码g ...
- java基准测试_星期五基准功能Java
java基准测试 让我们的产品所有者有一天变得疯狂,并要求您执行以下操作: From a set of Strings as follows : " marco_8"," ...
最新文章
- C语言程序设计 细节总结(第9章 结构体共用体枚举)
- 开发日记-20190521 关键词 bash的几个初始化文件
- 《编译与反编译技术实战》——第2章编译器实践概述
- BZOJ - 3578: GTY的人类基因组计划2
- VTK:隐式二次元用法实战
- fis3 php cgi,FIS3 : 构建
- 8月13日见!三星Note 20国行版官宣:唯一悬念只剩价格
- php基础编程教程 pdf,手把手教你编程打印出PDF_PHP教程
- Linux中,根目录下文件夹的含义
- tomcat的server.xml中的Context节配置
- 【STM32H7】第5章 ThreadX NetXDUO网络协议栈介绍
- oracle分区详解
- 华为笔记本换装linux双系统,华为及荣耀笔记本装Deepin双系统不能引导Windows的解决...
- 金彩教育:店铺中的人才布局
- 安卓Bmob后端云的使用(增删改查、上传图片、推送服务等)
- MATLAB随机森林回归模型
- 卫星图像地物判别标志(假彩色)
- facebook使用教程_您可以在Facebook上使用假名吗?
- 4.怎么理解相互独立事件?真的是没有任何关系的事件吗? 《zobol的考研概率论教程》
- 【人工智能 Open AI】设计一个SQL Where DSL模型,使用 golang 代码来实现DSL的翻译成SQL。