2012-03-02 2 views
0

Я пытаюсь сгенерировать несколько случайных удвоений между 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

Почему вы обновляете семя вместо хранения экземпляра «Случайный»? – amit

+0

Ваши случайные значения близки друг к другу, потому что все ваши экземпляры «Random» используют значения семян, которые почти равны друг другу. Решение Duffymo должно работать ... – quaylar

ответ

4

Я рекомендовал бы, чтобы вы не обновлять семена. Вы также должны сделать случайным экземпляр класса, а не создавать экземпляр каждый раз, когда вы вызываете этот метод.

public class MyClass { 
    private Random random = new Random(System.currentTimeMillis()); 

public double returnRandom() { 
    return this.random.nextDouble(); 
} 
} 
1

Вам не нужно обновлять семя вашего Random объект - на самом деле, вероятно, это плохо.

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 
1

попробовать Math.random() это дает равномерное распределение в [0,1) - это создает случайный объект за кулисами и использует тот же один для всех последующих вызовов. Например,

public double returnRandom() { 
    return Math.random(); 
} 
+0

Есть ли польза от использования класса Math.random() или Random? – user994165

+0

Простой код. Как я уже сказал, он создает экземпляр Random в любом случае, но вам не нужно иметь дело с этим. – Robert