Подтвердить что ты не робот

Как создать случайные числа в Dart?

Как создать случайные числа с помощью Dart?

4b9b3361

Ответ 1

Используйте Random класс из dart:math:

import 'dart:math';

main() {
  var rng = new Random();
  for (var i = 0; i < 10; i++) {
    print(rng.nextInt(100));
  }
}

Этот код был протестирован с помощью Dart VM и dart2js на момент написания этой статьи.

Ответ 2

Если вам нужны криптографически безопасные случайные числа (например, для шифрования), и вы находитесь в браузере, вы можете использовать API криптографии DOM:

int random() {
  final ary = new Int32Array(1);
  window.crypto.getRandomValues(ary);
  return ary[0];
}

Это работает в Dartium, Chrome и Firefox, но, скорее всего, не в других браузерах, поскольку это экспериментальный API.

Ответ 3

Альтернативным решением может быть использование следующего кода DRandom. Этот класс следует использовать с семенем. Он обеспечивает знакомый интерфейс к тому, что вы ожидаете в .NET, он был перенесен из моно Random.cs. Этот код не может быть безопасным для криптографии и не был статистически протестирован.

Ответ 4

Здесь приведен фрагмент для создания списка случайных чисел

import 'dart:math';

main() {
  var rng = new Random();
  var l = new List.generate(12, (_) => rng.nextInt(100));
}

Это приведет к созданию списка из 12 целых чисел от 0 до 99 (включительно).

Ответ 5

Безопасный случайный API был добавлен только к dart:math

new Random.secure()

dart:math  Random добавлен конструктор secure, возвращающий криптографически безопасный   случайный генератор, который считывает из источника энтропии, предоставленного   для каждого генерируемого случайного значения.

который делегирует window.crypto.getRandomValues() в браузере и ОС (например, urandom на сервере)

Ответ 7

Просто написал этот маленький класс для генерации случайных чисел Обычный... это была достойная отправная точка для проверки, которую мне нужно сделать. (Эти наборы будут распределяться по "колоколообразной" форме кривая.) Семя будет установлено случайным образом, но если вы хотите иметь возможность повторно сгенерировать набор, вы можете просто передать определенное семя и создать тот же набор.

Удачи...

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);

Затем вы можете просто использовать его таким образом, чтобы проверить среднее число наборов из 1000 чисел, созданных между минимумом и максимумом. Значения сохраняются в классе, поэтому к ним можно получить доступ после создания экземпляра.

_swarmii