2011-11-23 13 views
7

Come possiamo generare un numero casuale molto grande in java? Sto parlando di qualcosa come 10000 cifre? So che dobbiamo usare BigInteger ma come possiamo farlo? Qual è il modo più efficace per fare qualcosa del genere? Si prega di fornire un piccolo esempio. Grazie.Generazione di numeri casuali molto grandi java

risposta

17

Beh, in un modo è quello di andare a Random.org e scaricare un uno dei file casuali binari. I file sono generati dal rumore atmosferico, quindi è molto casuale. L'ho usato per le chiavi di Zobrist nel mio motore di scacchi.

In alternativa si potrebbe andare

BigInteger b = new BigInteger(256, new Random()); 

che vi darà ciò che si desidera. In questo esempio, un BigInteger costituito da 256 bit.

+1

+1. C'erano quattro costruttori nella documentazione, non l'ho visto: D. – Vlad

+0

Succede al meglio di noi! –

7

Combina Random.nextBytes(byte[]) con BigInteger(byte[]).

import java.util.*; 
import java.math.*; 
class Test{ 
    public static void main(String[]_){ 

     int n = 16; 

     Random r = new Random(); 
     byte[] b = new byte[n]; 
     r.nextBytes(b); 
     BigInteger i = new BigInteger(b); 

     System.out.println(i); 
    } 
} 
+1

+1: Utilizzare possibilmente mod() per ottenere un numero specifico di cifre. –

+0

puoi spiegare come funziona? Sono più o meno confuso sulla parte dei byte .. grazie –

+0

Si assegna un array di byte, nextBytes lo riempie con valori casuali, e quindi il BigInteger viene inizializzato come il numero binario definito da quella sequenza di byte. Ma penso che la soluzione di Jaco sia più concisa. – Vlad