In un programma è spesso necessario eseguire operazioni sui numeri; una di queste potrebbe essere la generazione di un numero casuale (o random nuber). In Java è possibile ottenere un numero casuale seguendo "due strade" differenti.
Utilizzare Math.random()
La prima consiste nell’utilizzo della classe Math e del suo metodo random() il quale restituisce un valore numerico casuale compreso tra 0.1 e 1.0. Quello che ci verrà restituito da Math.random(), quindi, è un numero decimale (o più correttamente un double) compreso nell’intervallo indicato. La sintassi è semplicissima:
[tipo] [nome_variabile] = Math.random();
Vediamo un esempio:
double casuale = Math.random();
A fronte di questa operazione è anche possibile ottenere un numero intero, per farlo non dovremo far altro che effettuare una semplice moltiplicazione:
double casuale = (int)(Math.random()*10);
Questo codice restiturà, quindi, un numero casuale compreso tra 1 e 10.
Utilizzare la classe java.util.Random
Fino ad ora abbiamo visto come generare un numero (pseudo)casuale utilizzando Math.random() il quale non fa altro che utilizzare un’istanza della classe Random del package java.util invocando il metodo nextDouble(). Possiamo quindi dire di aver utilizzato sino ad ora una "scorciatoia"; tuttavia, se si desidera avere risultati più elaborati, possiamo far ricorso direttamente alla classe Random nei modi che vedremo di seguito.
Per prima cosa dobbiamo, ovviamente, istanziare la classe:
Random random = new Random();
Generare un valore booleano
Per ottenere un valore booleano randomico utiliziamo:
boolean miavar = random.nextBoolean();
Generare un valore intero
Per ottenere un numero casuale intero possiamo utilizzare il metodo nextInt() in questo modo:
int miavar = random.nextInt();
Possiamo anche richiedere che il valore sia compreso tra 0 ed un numero arbitrario (intero). Per fare ciò è sufficiente passare il numero limite come argomento del metodo nextInt():
int miavar = random.nextInt(100);
Se desideriamo che il numero casuale sia compreso tra due valori arbitrari possiamo utilizzare un codice di questo genere:
int a = 80; // numero minimo
int b = 500; // numero massimo
int c = ((b-a) + 1);
int miavar = random.nextInt(c) + a;
Possiamo tradurre questo codice anche in una classe:
public static int randInt(int min, int max) {
Random rand = new Random();
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}
Generare un valore double e float
Se vogliamo generare un valore double randomico possiamo utilizzare, come già visto, Math.random() oppure:
double miavar = random.nextDouble();
Se, per finire, vogliamo creare un valore randomico di tipo float (compreso tra 0.1 e 1.0) possiamo utilizzare:
float miavar = random.nextFloat();