La classe Java Random è utilizzata per generare una serie di numeri casuali.
Classe Random di Java
Random
fa parte del pacchetto java.util.- Un’istanza della classe Random di Java viene utilizzata per generare numeri casuali.
- Questa classe fornisce diversi metodi per generare numeri casuali di tipo intero, double, long, float, ecc.
- L’algoritmo di generazione di numeri casuali funziona sul valore iniziale (seed). Se non fornito, il valore seed viene creato dal tempo nano di sistema.
- Se due istanze di Random hanno lo stesso valore seed, genereranno la stessa sequenza di numeri casuali.
- La classe Random di Java è thread-safe, ma in un ambiente multithreaded è consigliabile utilizzare la classe
java.util.concurrent.ThreadLocalRandom
. - Le istanze della classe Random non sono adatte per applicazioni sensibili alla sicurezza, è meglio utilizzare
java.security.SecureRandom
in quei casi.
Costruttori di Random di Java
La classe Random di Java ha due costruttori che sono riportati di seguito:
Random()
: crea un nuovo generatore casualeRandom(long seed)
: crea un nuovo generatore casuale utilizzando il seed specificato
Metodi della classe Random di Java
Diamo un’occhiata ad alcuni dei metodi della classe Random di Java.
nextBoolean()
: Questo metodo restituisce il prossimo pseudorandom che è un valore booleano dalla sequenza del generatore di numeri casuali.nextDouble()
: Questo metodo restituisce il prossimo pseudorandom che è un valore double compreso tra 0,0 e 1,0.nextFloat()
: Questo metodo restituisce il prossimo pseudorandom che è un valore float compreso tra 0,0 e 1,0.nextInt()
: Questo metodo restituisce il prossimo valore int dalla sequenza del generatore di numeri casuali.- nextInt(int n): Questo metodo restituisce un pseudorandom che è un valore int compreso tra 0 e il valore specificato dalla sequenza del generatore di numeri casuali.
Esempio di Random in Java
Diamo un’occhiata al seguente programma di esempio Random in Java.
package com.journaldev.examples;
import java.util.Random;
/**
* Java Random Number Example Program
*
*/
public class RandomNumberExample {
public static void main(String[] args) {
//inizializza il generatore di numeri casuali
Random random = new Random();
//genera un valore booleano
System.out.println(random.nextBoolean());
//genera un valore double
System.out.println(random.nextDouble());
//genera un valore float
System.out.println(random.nextFloat());
//genera un valore int
System.out.println(random.nextInt());
//genera un valore int within specific limit
System.out.println(random.nextInt(20));
}
}
L’output del programma sopra è:
false
0.30986869120562854
0.6210066
-1348425743
18
Controlla questo post per saperne di più su Generazione di numeri casuali in Java.
Generare un numero casuale usando un seed
Esistono due modi per generare un numero casuale utilizzando un seed.
Random random = new Random(long seed);
Random random1 = new Random();
random1.setSeed(seed);
Il seed è il valore iniziale dello stato interno del generatore di numeri pseudocasuali, che viene mantenuto dal metodo next(int).
package com.journaldev.examples;
import java.util.Random;
/**
* Java Random Number Using Seed Example Program
*
* @author pankaj
*
*/
public class RadomSeedExample {
public static void main(String[] args) {
//utilizzando il costruttore
Random random = new Random(100);
System.out.println("Using Constructor");
System.out.println(random.nextInt());
//utilizzando il metodo
Random random2 = new Random();
random2.setSeed(200);
System.out.println("Using Method");
System.out.println(random2.nextInt());
}
}
L’output del programma sopra è:
Using Constructor
-1193959466
Using Method
-1133938638
Cosa succede se passiamo lo stesso seed a due diversi generatori di numeri casuali? Diamo un’occhiata al programma sottostante e vediamo cosa succede se passiamo lo stesso seed a due diversi generatori di numeri casuali.
package com.journaldev.examples;
import java.util.Random;
/**
* Java Random Number Using Same Seed Example Program
*
*/
public class RandomNumberSameSeedExample {
public static void main(String[] args) {
//inizializza due generatori di numeri casuali utilizzando lo stesso seed
Random random1 = new Random(100);
Random random2 = new Random(100);
System.out.println(random1.nextInt());
System.out.println(random2.nextInt());
}
}
L’output del programma sopra è:
-1193959466
-1193959466
Possiamo vedere che genera lo stesso numero casuale se passiamo lo stesso seed a due diversi generatori di numeri casuali.
Metodi della classe Random in Java 8
Come puoi vedere dall’immagine sopra, ci sono molti nuovi metodi aggiunti nella classe Random di Java 8. Questi metodi possono produrre uno stream di numeri casuali. Di seguito è riportato un semplice programma per generare uno stream di 5 numeri interi tra 1 e 100.
package com.journaldev.random;
import java.util.Random;
import java.util.stream.IntStream;
public class JavaRandomExample {
public static void main(String[] args) {
Random random = new Random();
// generare uno stream di 5 int tra 1 e 100
IntStream ints = random.ints(5, 1, 100);
ints.forEach(System.out::println);
}
}
Questo è tutto per un rapido riepilogo sulla classe Random di Java. Riferimento: API Doc
Source:
https://www.digitalocean.com/community/tutorials/java-random