Press "Enter" to skip to content

Generare un numero random in java

Spesso in java serve generare uno o una serie di numeri randomici compresi in un certo intervallo.
Esistono principalmente due diversi modi per fare questa operazione in base a se vogliamo il controllo del seme di inizializzazione del randomizzatore o se vogliamo lasciare la scelta a java.
Il primo modo è tramite un ThreadLocalRandom, che permette di creare un numero intero casuale compreso fra un minimo (incluso) e un massimo (escluso).
Vediamo qui sotto un esempio di codice:

import java.util.concurrent.ThreadLocalRandom;

 int numeroRandom = ThreadLocalRandom.current().nextInt(min, max + 1);

Se invece vogliamo creare il nostro numero casuale avendo il controllo del seed, ad esempio perchè vogliamo poter ricreare la stessa sequenza di numeri casuali per ragioni di test, possiamo utilizzare java.util.Random che ci permette di inizializzare un’istanza specificando il seed da fornire al generatore.
In questo caso il metodo nextInt richiede in ingresso un solo intero e genererà un numero compreso fra 0 (incluso) e il numero fornito (escluso), dovremmo quindi fare qualche conto in più per ottenere un numero compreso fra il nostro minimo e il nostro massimo (ovviamente a meno che il minimo non sia 0).
Ricordiamo sempre che, fornendo lo stesso seed alla classe Random sarà generata sempre la stessa identica sequenza quindi è assolutamente sconsigliato utilizzare questa soluzione in caso si vogliano sequenze sempre diverse ad ogni esecuzione.
Vediamo un esempio di codice:

    public static void main(String[] args) {
        int min = 4;
        int max = 10;
        Random random = new Random(54);
        System.out.println(random.nextInt((max - min) +1) + min);
        System.out.println(random.nextInt((max - min) +1) + min);
        System.out.println(random.nextInt((max - min) +1) + min);
    }

Questo codice genererà sempre i numeri 7, 4 e 8 ad ogni esecuzione, ci permetterà quindi di creare una serie di numeri pseudo-casuali sempre uguali. Ovviamente cambiando il seed (in questo caso 54) cambierà anche la sequenza, potremmo quindi generare diverse sequenze semplicemente creando più di un’istanza della classe Random.
Se avete la necessità di generare numeri casuali con un’attenzione particolare alla sicurezza (ad esempio per applicazioni crittografiche) è disponibile anche la classe java.security.SecureRandom ma vi consiglio di leggere la documentazione per approfondirne il funzionamento e l’uso.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *