2012-12-05 9 views

risposta

27

Se si desidera valori a lungo raggio basata quindi effettuare le seguenti:

long LOWER_RANGE = 0; //assign lower range value 
long UPPER_RANGE = 1000000; //assign upper range value 
Random random = new Random(); 


long randomValue = LOWER_RANGE + 
          (long)(random.nextDouble()*(UPPER_RANGE - LOWER_RANGE)); 
+1

+1 Vale la pena notare che Random utilizza un seme a 48 bit in modo che non generi tutti i possibili 'double' o' long'. SecureRandom è lento ma genererà tutti i valori possibili. –

+3

Perché non hai usato nextLong()? –

1

Si potrebbe utilizzare nextInt per generare interi superiori e inferiori della lunga. È persino possibile estendere la classe Random con il metodo nextLong (anche se la composizione potrebbe essere una scelta più sicura per una programmazione più seria).

Dai un'occhiata al Javadoc di nextInt (int n). Un metodo nextLong potrebbe essere implementato utilizzando lo stesso algoritmo. Riuscire a farlo bene potrebbe rivelarsi un po 'complicato. Preparati a fare un po 'di matematica con carta e penna. Usare una libreria comprovata è saggio se non stai solo programmando per divertirti.

+0

Questo non è corretto; restituirà valori maggiori di n in occasione. –

+0

@StefanReich Vero. I bit bassi di n saranno ignorati. Modificherò la risposta. –

+0

@StefanReich Ho rimosso l'esempio errato. –