Как сгенерировать случайные числа с помощью Dart?
Как сгенерировать случайные числа с помощью Dart?
Ответы:
Используйте Random
класс из dart:math
:
import 'dart:math';
main() {
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
Этот код был протестирован с виртуальной машиной Dart и dart2js на момент написания этой статьи.
/dev/urandom
вместе с File
классом.
Вы можете добиться этого с помощью Random
объекта класса random.nextInt(max)
, который находится вdart:math
библиотеке. nextInt()
Метод требует максимального предела. Случайное число начинается с, 0
и сам максимальный предел является исключительным.
import 'dart:math';
Random random = new Random();
int randomNumber = random.nextInt(100); // from 0 upto 99 included
Если вы хотите добавить минимальный лимит, добавьте минимальный лимит к результату
int randomNumber = random.nextInt(90) + 10; // from 10 upto 99 included
Если вам нужны криптографически безопасные случайные числа (например, для шифрования) и вы находитесь в браузере, вы можете использовать API криптографии DOM :
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
Это работает в Dartium, Chrome и Firefox, но, вероятно, не в других браузерах, поскольку это экспериментальный API.
Вот фрагмент для создания списка случайных чисел
import 'dart:math';
main() {
var rng = new Random();
var l = new List.generate(12, (_) => rng.nextInt(100));
}
Это сгенерирует список из 12 целых чисел от 0 до 99 (включительно).
Безопасный случайный API был только что добавлен в dart:math
new Random.secure()
dart:math
Random
добавленsecure
конструктор, возвращающий криптографически безопасный генератор случайных чисел, который считывает из источника энтропии, предоставленного устройством для внедрения, для каждого сгенерированного случайного значения.
который делегирует window.crypto.getRandomValues()
в браузере и в ОС (как urandom
на сервере)
Не могу комментировать, потому что я только что создал эту учетную запись, но я хотел отметить, что решение @ eggrobot78 работает, но оно эксклюзивно для dart, поэтому оно не включает последний номер. Если вы измените последнюю строку на «r = min + rnd.nextInt (max - min + 1);», тогда она также должна включать последнее число.
Объяснение:
max = 5;
min = 3;
Random rnd = new Random();
r = min + rnd.nextInt(max - min);
//max - min is 2
//nextInt is exclusive so nextInt will return 0 through 1
//3 is added so the line will give a number between 3 and 4
//if you add the "+ 1" then it will return a number between 3 and 5
Альтернативным решением может быть использование следующего кода DRandom . Этот класс следует использовать с семенем. Он обеспечивает знакомый интерфейс того, что вы ожидаете от .NET, он был перенесен из моно-файла Random.cs. Этот код может быть небезопасным для криптографии и не был статистически протестирован.
Просто написал этот маленький класс для генерации нормального случайных чисел ... это была достойная отправная точка для проверки, которую мне нужно сделать. (Эти наборы будут распределяться по кривой в форме «колокола».) Начальное число будет установлено случайным образом, но если вы хотите иметь возможность повторно сгенерировать набор, вы можете просто передать какое-то конкретное начальное число, и тот же набор будет сгенерирован.
Радоваться, веселиться...
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
используйте эту библиотеку http://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dart предоставил хороший генератор случайных чисел, который, я думаю, скоро будет включен в SDK, надеюсь, это поможет
Для меня проще всего сделать:
import 'dart:math';
Random rnd = new Random();
r = min + rnd.nextInt(max - min);
//where min and max should be specified.
это сработало для меня new Random().nextInt(100); // MAX = number
он даст от 0 до 99 случайное число
Eample ::
import 'dart:math';
int MAX = 100;
print(new Random().nextInt(MAX));`
Позвольте мне решить этот вопрос на практическом примере в виде простого приложения для катания игральных костей, которое при нажатии случайным образом вызывает на экран одно из 6 изображений лиц игральных костей.
сначала объявите переменную, которая генерирует случайные числа (не забудьте импортировать dart.math). Затем объявите переменную, которая анализирует начальное случайное число в пределах ограничений от 1 до 6, как целое число.
Обе переменные являются статическими частными, чтобы их можно было инициализировать один раз. Это не так уж важно, но было бы хорошей практикой, если бы вам пришлось инициализировать целую кучу случайных чисел.
static var _random = new Random();
static var _diceface = _rnd.nextInt(6) +1 ;
Теперь создайте виджет обнаружения жестов с ClipRRect в качестве дочернего, чтобы возвращать одно из шести изображений лиц игральных костей на экран при нажатии.
GestureDetector(
onTap: () {
setState(() {
_diceface = _rnd.nextInt(6) +1 ;
});
},
child: ClipRRect(
clipBehavior: Clip.hardEdge,
borderRadius: BorderRadius.circular(100.8),
child: Image(
image: AssetImage('images/diceface$_diceface.png'),
fit: BoxFit.cover,
),
)
),
Новое случайное число генерируется каждый раз, когда вы касаетесь экрана, и на это число ссылаются, чтобы выбрать изображение лица игральной кости.
Я надеялся, что этот пример помог :)
Приложение для игры в кости с использованием случайных чисел в дротике