生成随机数字:更新种子

生成随机数字:更新种子

问题描述:

我试图在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]

+0

为什么更新种子而不是存储'Random'的实例? – amit 2012-03-02 10:52:03

+0

您的随机值彼此接近,因为您所有的“随机”实例正在使用几乎彼此相等的种子值。 Duffymo的解决方案应该可以工作... – quaylar 2012-03-02 10:54:13

我建议你不更新的种子。你也应该使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(); 
} 
+0

使用Math.random()和Random类有什么好处吗? – user994165 2012-03-02 21:14:52

+0

简单的代码。正如我所说,它创建了一个随机的实例,但你不必处理。 – Robert 2012-03-03 00:01:55