Domanda

Come posso generare numeri casuali usando DART?

È stato utile?

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 costruttore secure 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 (come urandom 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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top