Ce face Random.nextDouble
nextDouble() returnează un double aleator în intervalul [0.0, 1.0). Înmulțit și deplasat, îl transformi în orice interval: a + r.nextDouble() * (b - a).
nextBool() returnează true sau false cu probabilitate egală, ca o aruncare de monedă. Pentru o probabilitate oarecare p folosește r.nextDouble() < p.
Ce returnează
nextDouble: un double din [0, 1); nextBool: un bool.
Exemple
Exemplul 1: Monedă și numere reale
import 'dart:math';
void main() {
final r = Random(42);
print(r.nextDouble());
print(r.nextDouble().toStringAsFixed(3));
final monede = [for (var i = 0; i < 6; i++) r.nextBool() ? 'cap' : 'pajură'];
print(monede);
}
Rezultat
0.15092545597797424
0.604
[pajură, cap, pajură, pajură, cap, cap]
Exemplul 2: Prețuri simulate între 10 și 20 de lei
import 'dart:math';
void main() {
final r = Random(3);
for (final produs in ['pâine', 'lapte', 'brânză']) {
final pret = 10 + r.nextDouble() * 10;
print('$produs: ${pret.toStringAsFixed(2)} lei');
}
}
Rezultat
pâine: 13.63 lei
lapte: 10.60 lei
brânză: 10.69 lei
Exemplul 3: Probabilitate de 30%
Într-un șir lung de încercări, cam 30% din ele reușesc. Cu seed fix, numărul exact este mereu același.
import 'dart:math';
void main() {
final r = Random(11);
var ploua = 0;
for (var zi = 0; zi < 1000; zi++) {
if (r.nextDouble() < 0.3) ploua++;
}
print('Zile cu ploaie din 1000: $ploua');
}
Rezultat
Zile cu ploaie din 1000: 301
Greșeli frecvente
- Te aștepți ca
nextDouble()să poată returna 1.0. Limita de sus este exclusivă. - Faci
(r.nextDouble() * 10).toInt()și apoi folosești rezultatul fără să știi că este 0…9. Pentru întregi,nextInte mai clar.
Comenzi înrudite
Random: Generatorul de numere aleatorii; nextInt(max) dă un întreg între 0 și max – 1. Cu seed, șirul se repetă.Random.secure: Un generator aleator sigur criptografic, potrivit pentru parole, coduri și token-uri; nu acceptă seed.