Generatore di numeri casuali in Java

Oggi vedremo come generare un numero casuale in Java. A volte abbiamo bisogno di generare numeri casuali nei programmi Java. Ad esempio, in un gioco con i dadi o per generare un identificatore chiave casuale per la crittografia, ecc.

Generatore di numeri casuali in Java

Ci sono molti modi per generare un numero casuale in Java.

  1. La classe java.util.Random può essere utilizzata per creare numeri casuali. Fornisce diversi metodi per generare numeri casuali interi, long, double ecc.
  2. Possiamo anche usare Math.random() per generare un double. Questo metodo utilizza internamente la classe Java Random.
  3. La classe java.util.concurrent.ThreadLocalRandom dovrebbe essere utilizzata per generare numeri casuali in un ambiente multithreaded. Questa classe fa parte del pacchetto Java Concurrent ed è stata introdotta in Java 1.7. Questa classe ha metodi simili alla classe Java Random.
  4. La classe java.security.SecureRandom può essere utilizzata per generare numeri casuali con una forte sicurezza. Questa classe fornisce un generatore di numeri casuali crittograficamente forte. Tuttavia, è lento nel processare. Quindi, a seconda dei requisiti della tua applicazione, dovresti decidere se utilizzarlo o no.

Generatore di Numeri Casuali in Java

Diamo un’occhiata ad alcuni esempi per generare un numero casuale in Java. In seguito, esamineremo anche un programma di esempio utilizzando ThreadLocalRandom e SecureRandom.

1. Generare un numero casuale intero

Random random = new Random();

int rand = random.nextInt();

Sì, è così semplice generare un numero casuale intero in Java. Quando creiamo l’istanza di Random, genera un valore seed lungo che viene utilizzato in tutte le chiamate ai metodi nextXXX. Possiamo impostare questo valore seed nel programma, tuttavia, non è richiesto nella maggior parte dei casi.

// Impostare il valore seed lungo utilizzando il costruttore di Random
Random random = new Random(123456789);

// Impostare il valore seed lungo utilizzando il metodo setter
Random random1 = new Random();
random1.setSeed(1234567890);

2. Numero casuale in Java tra 1 e 10

A volte dobbiamo generare un numero casuale in un intervallo. Ad esempio, in un gioco dei dadi i valori possibili possono essere solo tra 1 e 6. Di seguito è riportato il codice che mostra come generare un numero casuale tra 1 e 10 inclusi.

Random random = new Random();
int rand = 0;
while (true){
    rand = random.nextInt(11);
    if(rand !=0) break;
}
System.out.println(rand);

L’argomento nel metodo nextInt(int x) è escluso, quindi dobbiamo fornire l’argomento come 11. Inoltre, lo 0 è incluso nel numero casuale generato, quindi dobbiamo continuare a chiamare il metodo nextInt finché non otteniamo un valore compreso tra 1 e 10. Puoi estendere il codice sopra per generare il numero casuale all’interno di un qualsiasi intervallo dato.

3. Generare un numero casuale di tipo double

Possiamo utilizzare Math.random() o il metodo nextDouble della classe Random per generare un numero casuale di tipo double in Java.

Random random = new Random();

double d = random.nextDouble();

double d1 = Math.random();

4. Generare un numero casuale di tipo float

Random random = new Random();

float f = random.nextFloat();

5. Generare un numero casuale di tipo long

Random random = new Random();

long l = random.nextLong();

6. Generare un valore booleano casuale

Random random = new Random();

boolean flag = random.nextBoolean();

7. Generare un array di byte casuale

Possiamo generare byte casuali e inserirli in un array di byte fornito dall’utente utilizzando la classe Random. Il numero di byte casuali prodotti è uguale alla lunghezza dell’array di byte.

Random random = new Random();

byte[] randomByteArray = new byte[5];

random.nextBytes(randomByteArray);

System.out.println(Arrays.toString(randomByteArray)); // sample output [-70, -57, 74, 99, -78]

8. ThreadLocalRandom in un ambiente multithreading

Ecco un semplice esempio che mostra l’uso di ThreadLocalRandom in un ambiente multithreading.

package com.journaldev.randomnumber;

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class ThreadLocalRandomExample {

	public static void main(String[] args) {
		Runnable runnable = new MyRunnable();

		for (int i = 0; i < 5; i++) {
			Thread t = new Thread(runnable);
			t.setName("MyRunnable-Thread-" + i);
			t.start();
		}
	}

}

class MyRunnable implements Runnable {

	@Override
	public void run() {
		String threadName = Thread.currentThread().getName();
		System.out.println(threadName + "::" + ThreadLocalRandom.current().nextInt());
	}

}

Di seguito è riportato un esempio di output dell’esecuzione del programma sopra.

MyRunnable-Thread-0::-1744088963
MyRunnable-Thread-3::139405798
MyRunnable-Thread-1::1403710182
MyRunnable-Thread-2::-1222080205
MyRunnable-Thread-4::-185825276

Non possiamo impostare il valore del seed per un’istanza di ThreadLocalRandom, genererà un’eccezione UnsupportedOperationException. La classe ThreadLocalRandom ha anche alcuni metodi di utilità aggiuntivi per generare un numero casuale all’interno di un intervallo. Ad esempio, per generare un numero casuale tra 1 e 10, possiamo farlo come segue.

ThreadLocalRandom random = ThreadLocalRandom.current();
		
int rand = random.nextInt(1, 11);

ThreadLocalRandom ha metodi simili per generare valori long e double casuali.

9. Esempio di SecureRandom

Puoi utilizzare la classe SecureRandom per generare numeri casuali più sicuri utilizzando uno qualsiasi dei fornitori elencati. Di seguito è riportato un esempio di codice rapido SecureRandom.

Random random = new SecureRandom();

int rand = random.nextInt();

System.out.println(rand);

Questo è tutto ciò che riguarda la generazione di un numero casuale nel programma Java.

Puoi scaricare il codice di esempio dal nostro Repository GitHub.

Source:
https://www.digitalocean.com/community/tutorials/random-number-generator-java