Come posso generare numeri casuali in dardo?
Domanda
Come posso generare numeri casuali usando DART?
Soluzione
Utilizzare Random
classe da dart:math
:
import 'dart:math';
main() {
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
.
Questo codice è stato testato con il DART VM e DART2JS, a partire dal momento di questa scrittura.
Altri suggerimenti
Se è necessario Cryptograficamente-Secure numeri casuali (ad es. Per la crittografia), e sei in un browser, è possibile utilizzare dom Prittografia API :
.
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
funziona in Dartium, Chrome e Firefox, ma probabilmente non in altri browser in quanto questa è un'API sperimentale.
Ecco uno snippet per generare un elenco di numeri casuali
import 'dart:math';
main() {
var rng = new Random();
var l = new List.generate(12, (_) => rng.nextInt(100));
}
.
Generi un elenco di 12 numeri interi da 0 a 99 (incluso).
Un API casuale sicuro è stato appena aggiunto a dart:math
new Random.secure()
.
.
dart:math
Random
ha aggiunto un costruttoresecure
che restituisce un crittograficamente sicuro Generatore casuale che legge dalla fonte entropia fornita dal Embedder per ogni valore casuale generato.che delega a
window.crypto.getRandomValues()
nel browser e al sistema operativo (comeurandom
sul server)
Una soluzione alternativa potrebbe utilizzare il seguente codice drudom .Questa classe dovrebbe essere utilizzata con un seme.Fornisce un'interfaccia familiare a ciò che ci si aspetterebbe in .NET, è stato portato da Mono's Random.cs.Questo codice potrebbe non essere sicuro di crittografia e non è stato testato statisticamente.
Ho appena scritto questa piccola classe per generare numeri casuali Normal ... è stato un punto di partenza decente per il controllo che devo fare.(Questi set distribuiranno su una "campana" a forma di curva.) Il seme sarà impostato in modo casuale, ma se vuoi essere in grado di re-generare un set puoi semplicemente superare alcuni sementi specifici e lo stesso set genererà.
Divertiti ...
.
class RandomNormal {
num _min, _max, _sum;
int _nEle, _seed, _hLim;
Random _random;
List _rNAr;
//getter
List get randomNumberAr => _rNAr;
num _randomN() {
int r0 = _random.nextInt(_hLim);
int r1 = _random.nextInt(_hLim);
int r2 = _random.nextInt(_hLim);
int r3 = _random.nextInt(_hLim);
num rslt = _min + (r0 + r1 + r2 + r3) / 4000.0; //Add the OS back in...
_sum += rslt; //#DEBUG ONLY
return( rslt );
}
RandomNormal(this._nEle, this._min, this._max, [this._seed = null]) {
if (_seed == null ) {
Random r = new Random();
_seed = r.nextInt(1000);
}
_hLim = (_max - _min).ceil() * 1000;
_random = new Random(_seed);
_rNAr = [];
_sum = 0;//#DEBUG ONLY
h2("RandomNormal with k: ${_nEle}, Seed: ${_seed}, Min: ${_min}, Max: ${_max}");//#DEBUG ONLY
for(int n = 0; n < _nEle; n++ ){
num randomN = _randomN();
//p("randomN = ${randomN}");
LIST_add( _rNAr, randomN );
}
h3("Mean = ${_sum/_nEle}");//#DEBUG ONLY
}
}
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
Allora puoi semplicemente usarlo come questo per verificare la media dei set di 1000 numeri generati tra un limite basso e alto.I valori sono memorizzati nella classe in modo che possano essere accessibili dopo l'istanziazione.
_swarmii
Utilizzare questa libreria http://dart.googlecode.com / svn / filiali / bleeding_edge / dart / lib / math / casuale.dart fornito un buon generatore casuale che penso sarà incluso nell'SDK presto spero che aiuti
È possibile ottenerlo tramite Random
Class Object random.nextInt(max)
, che è nella libreria dart:math
.Il metodo nextInt()
richiede un limite massimo.Il numero casuale inizia da 0
e il limite massimo è esclusivo.
import 'dart:math';
Random random = new Random();
int randomNumber = random.nextInt(100); // from 0 upto 99 included
.
Se si desidera aggiungere il limite minimo, aggiungere il limite minimo al risultato
int randomNumber = random.nextInt(100) + 10; // from 10 upto 99 included
.