Ce face Math.random
Math.random() returnează un double aleatoriu în intervalul [0.0, 1.0). Pentru un întreg între min și max (inclusiv) se folosește formula min + (int) (Math.random() * (max - min + 1)).
În spate, metoda folosește un singur obiect java.util.Random comun. Pentru cod nou este mai simplu ThreadLocalRandom.current().nextInt(min, max + 1) sau un Random propriu. Un new Random(seed) cu seed fix produce mereu aceeași secvență, util pentru teste. Pentru parole sau coduri de securitate folosește SecureRandom.
Ce returnează
Un double în [0.0, 1.0).
Exemple
Exemplul 1: Zaruri aruncate
Rezultatul diferă la fiecare rulare.
public class Main {
public static void main(String[] args) {
System.out.println(Math.random());
for (int i = 0; i < 5; i++) {
int zar = 1 + (int) (Math.random() * 6);
System.out.print(zar + " ");
}
System.out.println();
}
}
Rezultat posibil (diferă la fiecare rulare)
0.7316828427264052
4 1 6 6 2
Exemplul 2: Intervalul este mereu respectat
Generăm 100.000 de valori și verificăm limitele: rezultatul afișat este mereu același.
public class Main {
public static void main(String[] args) {
double minim = 1, maxim = 0;
boolean toateZarurileCorecte = true;
for (int i = 0; i < 100_000; i++) {
double r = Math.random();
minim = Math.min(minim, r);
maxim = Math.max(maxim, r);
int zar = 1 + (int) (r * 6);
if (zar < 1 || zar > 6) {
toateZarurileCorecte = false;
}
}
System.out.println("minim >= 0: " + (minim >= 0));
System.out.println("maxim < 1: " + (maxim < 1));
System.out.println("zaruri între 1 și 6: " + toateZarurileCorecte);
}
}
Rezultat
minim >= 0: true
maxim < 1: true
zaruri între 1 și 6: true
Exemplul 3: Aceeași secvență cu un seed fix
Cu java.util.Random și un seed fix, „tragerea la sorți” se repetă identic la fiecare rulare.
import java.util.Random;
public class Main {
public static void main(String[] args) {
String[] elevi = {"Ana", "Ion", "Maria", "Radu", "Elena"};
Random r = new Random(2026);
for (int i = 0; i < 3; i++) {
System.out.println("La tablă: " + elevi[r.nextInt(elevi.length)]);
}
}
}
Rezultat
La tablă: Elena
La tablă: Ana
La tablă: Maria
Greșeli frecvente
- Scrii
(int) Math.random() * 6: conversia se aplică înainte de înmulțire, iar(int)dintr-o valoare sub 1 este mereu 0. Pune paranteze:(int) (Math.random() * 6). - Folosești
Math.random()pentru parole sau coduri de resetare: nu este sigur criptografic. FoloseșteSecureRandom.
Comenzi înrudite
Math.floor: floor() rotunjește în jos (spre minus infinit), ceil() rotunjește în sus (spre plus infinit); ambele returnează double.Math: Clasa cu funcții matematice gata făcute: rotunjiri, puteri, radicali, trigonometrie, minim/maxim și calcule întregi sigure.Math.round: round() rotunjește la cel mai apropiat întreg (.5 în sus); rint() rotunjește .5 spre numărul par și returnează double.