Ce face Random
Random produce numere care par aleatorii, dar sunt calculate după o formulă pornind de la o valoare inițială numită sămânță (seed). new Random() alege singur o sămânță diferită la fiecare pornire. new Random(42) folosește sămânța 42 și produce exact același șir de numere la fiecare rulare, pe orice calculator: util pentru teste și simulări reproductibile.
nextInt(n) returnează un întreg între 0 (inclusiv) și n (exclusiv). Pentru un zar scrii nextInt(6) + 1 sau, din Java 17, nextInt(1, 7). nextInt() fără argumente dă orice int, inclusiv negativ.
Random nu este potrivit pentru parole, coduri de confirmare sau token-uri de securitate: numerele lui se pot ghici. Pentru acestea folosește java.security.SecureRandom. În cod cu multe fire, ThreadLocalRandom.current() este mai rapid.
Parametri
| Parametru | Descriere |
|---|---|
seed |
Opțional, în constructor: sămânța (long). Aceeași sămânță = același șir de numere. |
limita |
Limita superioară exclusivă pentru nextInt; trebuie să fie pozitivă. |
start |
Limita inferioară inclusivă (în varianta cu două argumente). |
Ce returnează
Un obiect Random; nextInt returnează un int.
Exemple
Exemplul 1: Zaruri cu sămânță fixă
Cu sămânța 2026, numerele sunt aceleași la fiecare rulare.
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random zar = new Random(2026);
for (int arunc = 1; arunc <= 5; arunc++) {
System.out.println("Aruncarea " + arunc + ": " + (zar.nextInt(6) + 1));
}
System.out.println("Cu nextInt(1, 7): " + zar.nextInt(1, 7));
}
}
Rezultat
Aruncarea 1: 6
Aruncarea 2: 5
Aruncarea 3: 2
Aruncarea 4: 1
Aruncarea 5: 4
Cu nextInt(1, 7): 5
Exemplul 2: Aceeași sămânță, același șir
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random a = new Random(7);
Random b = new Random(7);
for (int i = 0; i < 4; i++) {
int x = a.nextInt(100);
int y = b.nextInt(100);
System.out.println(x + " și " + y + " -> egale: " + (x == y));
}
}
}
Rezultat
36 și 36 -> egale: true
64 și 64 -> egale: true
85 și 85 -> egale: true
44 și 44 -> egale: true
Exemplul 3: Alegerea unui câștigător la tombolă
Fără sămânță, câștigătorul diferă la fiecare rulare.
import java.util.List;
import java.util.Random;
public class Main {
public static void main(String[] args) {
List<String> participanti = List.of("Ana", "Mihai", "Ioana", "Radu", "Elena");
Random r = new Random();
System.out.println("Câștigătorul este: " + participanti.get(r.nextInt(participanti.size())));
}
}
Rezultat posibil (diferă la fiecare rulare)
Câștigătorul este: Ioana
Greșeli frecvente
- Creezi un
new Random()nou în buclă, la fiecare număr. Este inutil și mai lent; creează generatorul o dată și refolosește-l. - Scrii
Math.abs(r.nextInt()) % n. PentruInteger.MIN_VALUE,Math.absrămâne negativ; foloseștenextInt(n). - Generezi parole sau coduri de resetare cu
Random. FoloseșteSecureRandom.
Comenzi înrudite
Random.nextDouble: nextDouble() dă un număr real între 0.0 și 1.0 (fără 1.0); nextBoolean() dă true sau false cu șanse egale.Random.ints: Returnează un IntStream de numere aleatorii: ints(5, 1, 50) dă 5 numere între 1 și 49.UUID: Identificator unic de 128 de biți (ex. 3f2b8c1e-…); UUID.randomUUID() creează unul aleatoriu, practic imposibil de repetat.Math.random: Returnează un număr aleatoriu double, mai mare sau egal cu 0.0 și strict mai mic decât 1.0.