Articolo originale: Java Random Number Generator – How to Generate Integers With Math Random

I numeri casuali generati da computer sono divisi in due categorie: numeri casuali veri e numeri pseudo-casuali.

I numeri casuali veri vengono generati sulla base di fattori esterni. Ad esempio, ottenendo la casualità usando i rumori circostanti.

Ma generare numeri casuali veri in questo modo, richiede molto tempo. Quindi, possiamo utilizzare dei numeri pseudo-casuali che vengono generati usando un algoritmo e un valore iniziale.

I numeri pseudo-casuali sono adeguati per la maggior parte degli scopi. Ad esempio, puoi usarli in crittografia, per realizzare giochi con dadi o carte e per creare numeri OTP (one-time password).

In quest'articolo, impareremo come generare numeri pseudo-casuali usando Math.random() in Java.

1. Usare Math.random() per generare interi

Math.random() restituisce un numero pseudo-casuale di tipo double, maggiore di o uguale a zero e minore di uno.

Proviamolo in questo blocco di codice:

    public static void main(String[] args) {
        double randomNumber = Math.random();
        System.out.println(randomNumber);
    }
    // output #1 = 0.5600740702032417
    // output #2 = 0.04906751303932033

randomNumber ti darà numeri casuali diversi a ogni esecuzione.

Diciamo di voler generare numeri casuali in un range specifico, per esempio, da zero a quattro.

    // genera numeri casuali tra 0 e 4
    public static void main(String[] args) {
        // Math.random() genera un numero casuale tra 0.0 e 0.999
        // Quindi, Math.random()*5 è un numero tra 0.0 e 4.999
        double doubleRandomNumber = Math.random() * 5;
        System.out.println("doubleRandomNumber = " + doubleRandomNumber);
        // converti il double in numero intero
        int randomNumber = (int)doubleRandomNumber;
        System.out.println("randomNumber = " + randomNumber);
    }
    /* Output #1
    doubleRandomNumber = 2.431392914284627
    randomNumber = 2
    */

Quando convertiamo un double a int, il valore int mantiene soltanto la parte intera del numero.

Ad esempio, nel codice qui sopra, doubleRandomNumber è 2.431392914284627. La parte intera di doubleRandomNumber è 2 e la parte decimale (i numeri dopo il punto) è 431392914284627. Quindi, randomNumber manterrà soltanto la parte intera del numero 2.

Puoi leggere di più sul metodo Math.random() nella documentazione Java.

Usare Math.random() non è l'unico modo per generare numeri casuali in Java. Adesso, considereremo come generare numeri casuali usando la classe Random.

2. Usare la classe Random per generare interi

Nella classe Random, abbiamo molte metodi d'istanza che forniscono numeri casuali. In questa sezione, vedremo due metodi d'istanza: nextInt(int bound) e nextDouble().

Come usare il metodo nextInt(int bound)

nextInt(int bound) restituisce un numero pseudo-casuale di tipo int, maggiore di o uguale a zero e minore del valore bound.

Il parametro bound specifica il range. Ad esempio, se specifichiamo il bound come 4, nextInt(4) restituirà un valore di tipo int, maggiore o uguale a zero e minore di quattro. 0,1,2,3 sono i possibili risultati di nextInt(4) .

Dato che questo è un metodo d'istanza, dovremmo creare un oggetto random per utilizzarlo. Proviamo.

    public static void main(String[] args) {
        // crea oggetto Random
        Random random = new Random();
        // genera numero casuale tra 0 e 3
        int number = random.nextInt(4);
        System.out.println(number);
    }

Come usare il metodo nextDouble()

Analogamente a Math.random(), nextDouble() restituisce un numero pseudo-casuale di tipo double, maggiore di o uguale a zero e minore di uno.

    public static void main(String[] args) {
        // crea oggetto Random
        Random random = new Random();
        // genera numero random maggiore o uguale a 0.0 e minore di 1.0
        double number = random.nextDouble();
        System.out.println(number);
    }

Per altre informazioni, puoi leggere la documentazione Java.

Quale metodo scegliere?

Math.random() utilizza la classe random. Se nella nostra applicazione vogliamo solo numeri pseudo-casuali di tipo double, allora possiamo usare Math.random().

Altrimenti, possiamo usare la classe random dato che offre svariati metodi per generare numeri pseudo-casuali in tipi diversi come nextInt(), nextLong(), nextFloat() e nextDouble().

Grazie per aver letto quest'articolo.

Photo image by Brett Jordan on Unsplash

Buona programmazione!