In Java, perché sono i metodi di istanza nextInt () e nextDouble () degli oggetti Random?

5

In Java, perché nextInt() e nextDouble() metodi di istanza degli oggetti casuali?

Ritengo che questi metodi dovrebbero essere metodi statici della classe Random. Qual è lo scopo di dover istanziare un oggetto casuale per generare interi casuali o valori doppi?

    
posta David Faux 07.05.2012 - 20:32
fonte

3 risposte

9

La classe Random di Java utilizza un valore iniziale di seme e un < a href="http://en.wikipedia.org/wiki/Linear_congruential_generator"> generatore congruenziale lineare come parte del suo stato interno per generare una sequenza di numeri casuali. Se i metodi nextInt() e nextDouble() fossero statici, non avrebbero accesso a questa memoria interna.

Dai documenti:

If two instances of Random are created with the same seed, and the same sequence of method calls is made for each, they will generate and return identical sequences of numbers.

Nota che questo significa anche che se due istanze di Random vengono create con semi diversi , genereranno due sequenze diverse.

    
risposta data 07.05.2012 - 20:42
fonte
6

Il costruttore di Random ti consente di inserire un valore di inizializzazione, quindi dovresti poterlo usare con i metodi nextFoo.

    
risposta data 07.05.2012 - 20:35
fonte
3

perché ogni oggetto casuale ha il proprio seme che puoi impostare

questo consente a ciascun thread di avere il proprio Random senza doversi preoccupare dei problemi di efficienza causati dalla sincronizzazione

anche Math.random() ti consente di ottenere un doppio casuale nell'intervallo [0,1)

    
risposta data 07.05.2012 - 20:47
fonte

Leggi altre domande sui tag