Come posso generare numeri casuali usando Dart?Come posso generare numeri casuali in Dart?
risposta
Usa 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 in cui scriviamo.
Hey @Seth Ladd ... Ho scaricato dart da http://www.dartlang.org/downloads.html pochi minuti fa e #import ('dart: math'); dà un messaggio "non riesci a trovare la fonte di riferimento" ... Mi manca qualcosa – Aaron
Stai meglio leggendo '/ dev/urandom' con la classe' File' se vuoi numeri casuali fortemente crittografati. – Tower
E i numeri casuali negativi (doppi)? Sto provando ad implementare un metodo randomRange che genererebbe ad esempio da -0,8 a 0,9 ... il risultato sarebbe ad esempio -0,32 –
Se avete bisogno di crittograficamente sicure numeri casuali (ad esempio, per la crittografia), e sei in un browser, è possibile utilizzare il DOM cryptography API:
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
Questo funziona in Dartium, Chrome e Firefox , ma probabilmente non in altri browser poiché si tratta di un'API sperimentale.
Una soluzione alternativa potrebbe utilizzare il seguente codice DRandom. Questa classe dovrebbe essere utilizzata con un seme. Fornisce un'interfaccia familiare a ciò che ci si aspetterebbe da .NET, è stato portato da Random.cs di mono. Questo codice potrebbe non essere sicuro da crittografia e non è stato testato statisticamente.
Ho usato DRandom prima. Buona lib! –
uso questa libreria http://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dart ha fornito un buon generatore di numeri casuali che credo sarà incluso nel SDK presto spero che aiuta
Questo è ora nell'SDK. Vedere la mia risposta sopra per come usarlo. –
appena scritto questa piccola classe per la generazione di normali numeri casuali ... è stata una partenza decente punto per il controllo che devo fare. (Questi set si distribuiranno su una curva a forma di campana.) Il seme verrà impostato casualmente, ma se si vuole essere in grado di rigenerare un set si può semplicemente passare un seme specifico e lo stesso set verrà generato.
Buon divertimento ...
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 si può solo usare in questo modo per controllare la media di insiemi di 1000 nums generate tra un limite basso e alto. I valori sono memorizzati nella classe in modo che possano essere accessibili dopo l'istanziazione.
_swarmii
Ecco un frammento per generare una lista di numeri casuali
import 'dart:math';
main() {
var rng = new Random();
var l = new List.generate(12, (_) => rng.nextInt(100));
}
Questo genererà una lista di 12 numeri interi da 0 a 99 (compreso).
Un API casuale sicuro è stato appena aggiunto al dart:math
new Random.secure()
dart:math
Random
aggiunto un costruttoresecure
restituire un generatore casuale crittograficamente sicuro che legge dalla sorgente di entropia fornito dal embedder per ogni generato valore casuale.
che delega al window.crypto.getRandomValues()
nel browser e per il sistema operativo (come urandom
sul server)
Questa nuova API è disponibile in 1.14-dev o versione successiva. –
Come fai a sapere che sono numeri male? La cosa casuale è che non si può mai veramente dire ... http://i46.tinypic.com/2vw7237.gif – corsiKa
Fidati di me, sapresti che sono cattivi se hai usato il dardo: core Math. :) Ecco il bug: http://code.google.com/p/dart/issues/detail?id=499 –
Se vuoi sapere se i tuoi numeri casuali sono cattivi, usa la mia libreria ChiSquare per scoprire: https: //github.com/kaisellgren/ChiSquare –