Genera valori doppi casuali tra 0 e 1 in Java

Rupam Yadav 12 ottobre 2023
  1. Genera valori doppi casuali tra 0 e 1 utilizzando Math.random() in Java
  2. Genera valori doppi casuali tra 0 e 1 utilizzando Random().nextDouble() in Java
  3. Genera valori doppi casuali tra 0 e 1 utilizzando ThreadLocalRandom.current().nextDouble() in Java
Genera valori doppi casuali tra 0 e 1 in Java

Questo articolo introdurrà tre metodi per generare valori casuali tra 0 e 1 di tipo primitivo double. Per dimostrare la casualità dei valori generati, utilizzeremo un bucle per generare dieci valori casuali di doppio tipo tra 0 e 1.

Genera valori doppi casuali tra 0 e 1 utilizzando Math.random() in Java

La classe Math può essere utilizzata per eseguire varie operazioni matematiche. Possiamo usare questa classe anche per generare numeri casuali. Math.random() è la funzione statica che restituisce numeri casuali compresi tra 0 e 1. Qui, 0 è comprensivo dei valori generati, mentre 1 è sempre esclusivo.

Nell’esempio seguente, usiamo Math.random() per generare valori casuali di tipo double. Nell’output, possiamo vedere che i valori sono tutti casuali.

public class RandomDouble {
  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      double randomDbl = Math.random();

      System.out.println(randomDbl);
    }
  }
}

Produzione:

0.9537872648347154
0.2863804438195172
0.5815339629441948
0.7734677312115609
0.021051510563543485
0.9064133490694901
0.6833468691871607
0.30655711217738246
0.2730784326888416
0.6804778782692341

Genera valori doppi casuali tra 0 e 1 utilizzando Random().nextDouble() in Java

Un altro metodo che può generare numeri casuali tra 0 e 1 è nextDouble(), una parte della classe java.util.Random. Quando chiamiamo nextDouble() con l’oggetto della classe Random, restituisce un valore casuale compreso tra 0 e 1, proprio come abbiamo visto nell’esempio precedente.

Si dice che questo metodo sia più efficiente di Math.random().

import java.util.Random;

public class RandomDouble {
  public static void main(String[] args) {
    Random randomObj = new Random();

    for (int i = 0; i < 10; i++) {
      double randomDbl = randomObj.nextDouble();

      System.out.println(randomDbl);
    }
  }
}

Produzione:

0.240017494934622
0.08331956619499614
0.4359524465181911
0.5291811081068774
0.38193057731688373
0.6969527822622924
0.5436002348156281
0.32176862575520415
0.07327708002828293
0.9005635171231344

Genera valori doppi casuali tra 0 e 1 utilizzando ThreadLocalRandom.current().nextDouble() in Java

Le due tecniche che abbiamo visto in questo tutorial non sono efficienti per i sistemi multi-thread e possono causare prestazioni scadenti. Succede perché quando generiamo numeri casuali utilizzando la classe Random tutti i thread condividono la stessa istanza, il che significa che quando si verifica una modifica su un thread, vengono eseguiti anche tutti gli altri thread.

Per risolvere questo problema, Java ha introdotto ThreadLocalRandom nell’aggiornamento JDK 7. È una classe che viene eseguita solo sul thread corrente, ottenendo prestazioni migliori in un ambiente con più thread.

Nell’esempio seguente, chiamiamo nextDouble() che genera doppi valori casuali con ThreadLocalRandom.current(), e restituisce un valore double random tra 0 e 1.

import java.util.concurrent.ThreadLocalRandom;

public class RandomDouble {
  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      double randomDbl = ThreadLocalRandom.current().nextDouble();

      System.out.println(randomDbl);
    }
  }
}

Produzione:

0.9717084711770174
0.8977374014983726
0.2744375247405819
0.2866498720386894
0.6118970047667582
0.7441044456568308
0.21043457873690274
0.08985457420563114
0.86748682220748
0.18952106607144148
Autore: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn