Ce face Random.nextDouble
nextDouble() returnează un double uniform distribuit în intervalul [0.0, 1.0). Îl folosești pentru probabilități: r.nextDouble() < 0.3 este adevărat în aproximativ 30% din cazuri. Din Java 17, nextDouble(start, limita) dă direct un număr într-un interval.
nextBoolean() returnează true sau false, fiecare cu probabilitatea 1/2: o aruncare de monedă. nextGaussian() dă numere după distribuția normală (clopotul lui Gauss), cu media 0 și abaterea standard 1.
Parametri
| Parametru | Descriere |
|---|---|
start, limita |
Intervalul [start, limita) pentru varianta din Java 17. |
Ce returnează
nextDouble: un double; nextBoolean: un boolean.
Exemple
Exemplul 1: Monedă și numere reale cu sămânță fixă
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random r = new Random(10);
for (int i = 1; i <= 3; i++) {
System.out.println("Moneda " + i + ": " + (r.nextBoolean() ? "cap" : "pajură"));
}
System.out.printf("nextDouble(): %.4f%n", r.nextDouble());
System.out.printf("Preț între 10 și 20 lei: %.2f%n", r.nextDouble(10, 20));
}
}
Rezultat
Moneda 1: cap
Moneda 2: pajură
Moneda 3: pajură
nextDouble(): 0.4129
Preț între 10 și 20 lei: 16.72
Exemplul 2: O probabilitate de 30%, verificată pe 100.000 de încercări
Proporția obținută este foarte aproape de 0,30.
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random r = new Random(1);
int ploua = 0;
int zile = 100_000;
for (int i = 0; i < zile; i++) {
if (r.nextDouble() < 0.3) ploua++;
}
System.out.printf("Zile cu ploaie: %d din %d (%.3f)%n", ploua, zile, (double) ploua / zile);
}
}
Rezultat
Zile cu ploaie: 30096 din 100000 (0.301)
Exemplul 3: Monedă corectă: aproape jumătate cap
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random r = new Random(99);
int cap = 0;
for (int i = 0; i < 10_000; i++) {
if (r.nextBoolean()) cap++;
}
System.out.println("Cap: " + cap + ", pajură: " + (10_000 - cap));
}
}
Rezultat
Cap: 5027, pajură: 4973
Greșeli frecvente
- Crezi că
nextDouble()poate da 1.0. Limita de sus nu este inclusă niciodată. - Scrii
(int) (r.nextDouble() * 6)pentru un zar și uiți+ 1. Obții 0…5; mai simplu foloseștenextInt(1, 7).
Comenzi înrudite
Random: Generator de numere pseudo-aleatorii; nextInt(n) dă un întreg între 0 și n-1. Cu o sămânță fixă, șirul se repetă.Random.ints: Returnează un IntStream de numere aleatorii: ints(5, 1, 50) dă 5 numere între 1 și 49.Math.random: Returnează un număr aleatoriu double, mai mare sau egal cu 0.0 și strict mai mic decât 1.0.