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.
- La classe java.util.Random può essere utilizzata per creare numeri casuali. Fornisce diversi metodi per generare numeri casuali interi, long, double ecc.
- Possiamo anche usare Math.random() per generare un double. Questo metodo utilizza internamente la classe Java Random.
- 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. - 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