Generare una serie di numeri casuali è una di quelle attività comuni che saltano fuori di tanto in tanto. In Java, può essere ottenuto semplicemente usando la classe java.util.Random.
Il primo passo, come con l'uso di qualsiasi classe API, è mettere l'istruzione import prima dell'inizio della classe del programma:
Quindi, crea un oggetto casuale:
L'oggetto Casuale ti fornisce un semplice generatore di numeri casuali. I metodi dell'oggetto danno la possibilità di scegliere numeri casuali. Ad esempio, i metodi nextInt () e nextLong () restituiranno un numero compreso nell'intervallo di valori (negativo e positivo) rispettivamente dei tipi di dati int e long:
I numeri restituiti saranno scelti casualmente int e valori lunghi:
Normalmente i numeri casuali da generare devono provenire da un certo intervallo (ad esempio, compreso tra 1 e 40 inclusivamente). A tale scopo, il metodo nextInt () può anche accettare un parametro int. Indica il limite superiore per l'intervallo di numeri. Tuttavia, il numero limite superiore non è incluso come uno dei numeri che è possibile selezionare. Potrebbe sembrare confuso, ma il metodo nextInt () funziona da zero verso l'alto. Per esempio:
sceglierà solo un numero casuale compreso tra 0 e 39. Per scegliere da un intervallo che inizia con 1, aggiungi semplicemente 1 al risultato del metodo nextInt (). Ad esempio, per selezionare un numero compreso tra 1 e 40, aggiungere inclusivamente uno al risultato:
Se l'intervallo inizia da un numero maggiore di uno, dovrai:
Ad esempio, per scegliere un numero compreso tra 5 e 35, il numero limite superiore sarà 35-5 + 1 = 31 e 5 deve essere aggiunto al risultato:
Vorrei sottolineare che la classe Random genera numeri casuali in modo deterministico. L'algoritmo che produce la casualità si basa su un numero chiamato seed. Se il numero seme è noto, è possibile capire i numeri che verranno prodotti dall'algoritmo. Per dimostrarlo, userò i numeri della data in cui Neil Armstrong ha calpestato la Luna per la prima volta come numero di seme (20 luglio 1969):
Indipendentemente da chi esegue questo codice, la sequenza di numeri "casuali" prodotta sarà:
Per impostazione predefinita, il numero seme utilizzato da:
è l'ora corrente in millisecondi dal 1 ° gennaio 1970. Normalmente questo produrrà numeri sufficientemente casuali per la maggior parte degli scopi. Tuttavia, si noti che due generatori di numeri casuali creati nello stesso millisecondo genereranno gli stessi numeri casuali.
Fai anche attenzione quando usi la classe Casuale per qualsiasi applicazione che deve avere un generatore di numeri casuali sicuro (ad esempio un programma di gioco d'azzardo). Potrebbe essere possibile indovinare il numero di seed in base al tempo di esecuzione dell'applicazione. In generale, per applicazioni in cui i numeri casuali sono assolutamente critici, è meglio trovare un'alternativa all'oggetto Casuale. Per la maggior parte delle applicazioni in cui è necessario solo un determinato elemento casuale (ad es. Dadi per un gioco da tavolo), allora funziona perfettamente.