这是我使用种子作为参数生成随机数的代码:
double randomGenerator(long seed) {
Random generator = new Random(seed);
double num = generator.nextDouble() * (0.5);
return num;
}
Run Code Online (Sandbox Code Playgroud)
每次我给种子并尝试生成100个数字时,它们都是相同的.
我怎样才能解决这个问题?
Den*_*ret 73
如果你给的是相同的种子,这是正常的.这是允许测试的重要特征.
检查这一点以了解伪随机生成和种子:
伪随机数发生器(PRNG),也称为确定性随机比特发生器DRBG,是用于生成近似随机数的属性的数字序列的算法.该序列不是真正随机的,因为它完全由一组相对较小的初始值确定,称为PRNG的状态,其中包括真正的随机种子.
如果你想拥有不同的序列(通常不调整或调试算法的情况),你应该调用零参数构造函数,它使用nanoTime每次尝试获取不同的种子.Random当然,这个实例应该保留在您的方法之外.
你的代码应该是这样的:
private Random generator = new Random();
double randomGenerator() {
return generator.nextDouble()*0.5;
}
Run Code Online (Sandbox Code Playgroud)
小智 21
简单的方法是使用:
Random rand = new Random(System.currentTimeMillis());
Run Code Online (Sandbox Code Playgroud)
这是生成Random数字的最佳方式.
duf*_*ymo 12
您不应该在方法范围中创建新的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();
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一个例子.我认为以Random这种方式包装不会增加任何价值.把它放在你正在使用它的一类中.
| 归档时间: |
|
| 查看次数: |
190821 次 |
| 最近记录: |