生成随机数字:更新种子
我试图在0和1之间生成几个随机双打。这是我运行的代码,但返回的数字非常接近。我希望统一分布在[0,1]或至少[0,1]的数字。我生成随机数字:更新种子
public class MyClass
long seed = System.currentTimeMillis();
......
public double returnRandom() {
Random rand = new Random();
seed += 4; //update the seed
rand.setSeed(seed);
return rand.nextDouble();
}
(遍历数组来填充)我结束了:
[0.10233441769044727]
[0.10484270731218648]
[0.1044843653222054]
[0.10412603823338551]
我建议你不更新的种子。你也应该使Random成为一个类实例,而不是每次调用该方法时都实例化一个实例。
public class MyClass {
private Random random = new Random(System.currentTimeMillis());
public double returnRandom() {
return this.random.nextDouble();
}
}
你不需要更新你的0的种子对象 - 事实上,这可能是一件坏事。
Random r = new Random();
for(int i=0; i<10; i++){
System.out.println(r.nextDouble());
}
输出:
0.42997799629765443
0.025965300992295326
0.6819794805907442
0.5766417169200183
0.2709962942207633
0.5094285626768145
0.9364741774517189
0.7849361529399873
0.512486723637452
0.32604095225979
尝试Math.random()
它给在[0,1均匀分布) - 它创建的幕后随机对象,并使用相同的一个随后所有的电话。例如
public double returnRandom() {
return Math.random();
}
使用Math.random()和Random类有什么好处吗? – user994165 2012-03-02 21:14:52
简单的代码。正如我所说,它创建了一个随机的实例,但你不必处理。 – Robert 2012-03-03 00:01:55
为什么更新种子而不是存储'Random'的实例? – amit 2012-03-02 10:52:03
您的随机值彼此接近,因为您所有的“随机”实例正在使用几乎彼此相等的种子值。 Duffymo的解决方案应该可以工作... – quaylar 2012-03-02 10:54:13