使用种子的Java随机数
这是我的代码,以种子为参数生成随机数:
doublerandomgenerator (长种子) {
Randomgenerator=newRandom(seed );
double num=generator.nextDouble () * ) 0.5;
return num;
}
每次我提供种子,试图生成100个数字,它们都是一样的。
怎样才能解决这个问题?
7个解决方案
73 votes
如果给你同样的种子,那就正常了。 这是允许测试的重要功能。
选择此选项可调查伪随机生成和种子。
伪随机数发生器
伪随机数发生器(PRNG ),也称为确定性随机比特发生器DRBG,是用于生成随机数序列的算法近似随机数属性的数字。 的序列不是真随机的,因为它完全与一组相对较小的初始值(称为PRNG状态)分离,包括真随机种子。
如果不调整或调试算法时使用的序列不同,则必须调用零参数构造函数,每次尝试使用nanoTime获取不同的种子。 当然,这个Random实例应该保留在方法之外。
代码可能与以下内容类似:
privaterandomgenerator=new random (;
双随机生成器
返回generator.next double (* 0.5;
}
denysguretanswered 2020-07-12t 12336024336002 z
21 votes
简单的方法如下
random rand=new random (system.current time millis () );
这是生成Random数字的最佳方法。
pollaranswered 2020-07-12t 12:24336027 z
11 votes
不应该在方法的范围内创建新的Random。 成为类的成员:
公共类foo {
私有随机随机
公共foo () }
系统. current time millis (this ) );
}
公共foo (long seed ) {
this.Random=newRandom(seed );
}
publicsynchronizeddoublegetnext (
return generator.nextDouble (;
}
}
这只是一个例子。 我觉得这样打包Random不会增加任何价值。 放入正在使用的类中。
duffymoanswered 2020-07-12t 12336024336051 z
6 votes
这就是伪RNG的原理。 这些数字真的不是随机的。 它们使用确定性算法生成,但根据种子的不同,生成数字的顺序也不同。 因为总是使用相同的种子,所以总是得到相同的序列。
jbnizetanswered 2020-07-12t 12336025336011 z
2 votes
问题是在随机生成器中再次添加了种子。 每次种子时,随机数生成器的初始状态都会被重置,生成的第一个随机数将成为初始状态之后的第一个随机数
minion 91 answered 2020-07-12t 12336025336031 z
2 votes
要使用单个种子生成多个数值,请执行下列操作:
公共双精度[ ] generate numbers (long seed,int amount ) {
double [ ] random list=new double [ amount ];
for(intI=0; I
Randomgenerator=newRandom(seed );
randomlist[I]=math.ABS () double ) (generator.nextLong ) % 0.001 ) * 10000 );
SEED—-;
}
return randomList;
}
如果使用相同的种子,则会显示相同的列表。
user 5479540 answered 2020-07-12t 12336025336056 z
1 votes
在这里的几个例子中,我们创建了一个新的ThreadLocalRandom实例,但这不是必需的。 也没有理由像解决方案那样使用synchronized。 请改为使用ThreadLocalRandom类的方法。
双随机生成器
returnthreadlocalrandom.current ().nextdouble ) 0.5;
}
Finn answered 2020-07-12t 12:26336018 z