Ce face Random
Random() creează un generator de numere pseudo-aleatorii. Metoda nextInt(max) returnează un întreg între 0 (inclusiv) și max (exclusiv), deci nextInt(6) dă 0…5. Pentru un zar scrii nextInt(6) + 1.
Dacă dai un seed (sămânță), Random(42), generatorul produce mereu același șir de numere. Este util la teste și la jocuri care trebuie să se poată relua. Fără seed, șirul diferă la fiecare rulare.
max trebuie să fie între 1 și 232; altfel se aruncă RangeError. Pentru parole sau coduri de securitate nu folosi Random(), ci Random.secure().
Parametri
| Parametru | Descriere |
|---|---|
seed |
Opțional. Sămânța: același seed dă același șir de numere. |
max |
La nextInt: limita superioară, exclusivă (1…232). |
Ce returnează
nextInt returnează un int din intervalul [0, max).
Exemple
Exemplul 1: Zaruri cu seed fix
Cu Random(42) rezultatul este același la fiecare rulare.
import 'dart:math';
void main() {
final r = Random(42);
final aruncari = [for (var i = 0; i < 8; i++) r.nextInt(6) + 1];
print('Zaruri: $aruncari');
final alt = Random(42);
print('Același seed: ${alt.nextInt(6) + 1} (la fel ca primul zar)');
}
Rezultat
Zaruri: [2, 1, 1, 2, 4, 3, 2, 2]
Același seed: 2 (la fel ca primul zar)
Exemplul 2: Alegerea unui elev la întâmplare
Un indice aleator între 0 și length - 1 alege un element din listă.
import 'dart:math';
void main() {
final elevi = ['Ana', 'Mihai', 'Ioana', 'Radu', 'Elena'];
final r = Random(7);
for (var zi = 1; zi <= 3; zi++) {
print('Ziua $zi răspunde: ${elevi[r.nextInt(elevi.length)]}');
}
}
Rezultat
Ziua 1 răspunde: Ana
Ziua 2 răspunde: Ioana
Ziua 3 răspunde: Radu
Exemplul 3: Număr într-un interval oarecare
Pentru un număr între a și b inclusiv: a + nextInt(b - a + 1).
import 'dart:math';
int intre(Random r, int a, int b) => a + r.nextInt(b - a + 1);
void main() {
final r = Random(2024);
final temperaturi = [for (var i = 0; i < 5; i++) intre(r, 18, 25)];
print('Temperaturi simulate în Cluj: $temperaturi');
print(temperaturi.every((t) => t >= 18 && t <= 25));
}
Rezultat
Temperaturi simulate în Cluj: [22, 20, 25, 22, 19]
true
Greșeli frecvente
- Crezi că
nextInt(10)poate da 10. Limita este exclusivă: valorile sunt 0…9. - Creezi un
Random()nou în fiecare iterație a unei bucle. Creează generatorul o singură dată și apelează-l de mai multe ori. - Folosești
Random()pentru parole sau token-uri. Nu este sigur criptografic; foloseșteRandom.secure().
Comenzi înrudite
Random.nextDouble: nextDouble dă un număr real între 0.0 (inclusiv) și 1.0 (exclusiv); nextBool dă true sau false.Random.secure: Un generator aleator sigur criptografic, potrivit pentru parole, coduri și token-uri; nu acceptă seed.max: max returnează cel mai mare dintre două numere, iar min pe cel mai mic; păstrează tipul argumentelor.