如何在Dart中生成随机数?

时间:2012-07-26 17:33:50

标签: random dart

如何使用Dart生成随机数?

14 个答案:

答案 0 :(得分:77)

使用dart:math中的Random课程:

import 'dart:math';

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

截至撰写本文时,此代码已使用Dart VM和dart2js进行了测试。

答案 1 :(得分:13)

如果您需要加密安全随机数(例如加密),并且您在浏览器中,则可以使用DOM cryptography API

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

这适用于Dartium,Chrome和Firefox,但可能不适用于其他浏览器,因为这是一个实验性API。

答案 2 :(得分:9)

尝试一下,您可以控制最小值/最大值:

import 'dart:math';

void main(){
  random(min, max){
    var rn = new Random();
    return min + rn.nextInt(max - min);
  }
  print(random(5,20)); // Output : 19, 6, 15..
}

答案 3 :(得分:8)

这是一个用于生成随机数列表的代码段

import 'dart:math';

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

这将生成一个包含0到99(含)的12个整数的列表。

答案 4 :(得分:7)

由于我刚刚创建了此帐户而无法发表评论,但我想确保指出@ 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

答案 5 :(得分:4)

安全随机API刚刚添加到dart:math

new Random.secure()
  

dart:math     Random添加了secure构造函数,返回加密安全性     随机发生器,从熵源提供的读取     每个生成的随机值的嵌入器。

代表浏览器和操作系统中的window.crypto.getRandomValues()(如服务器上的urandom

答案 6 :(得分:3)

另一种解决方案可能是使用以下代码DRandom。该类应与种子一起使用。它为.NET提供了一个熟悉的界面,它是从mono的Random.cs移植而来的。此代码可能不是加密安全的,并且未经过统计测试。

答案 7 :(得分:2)

刚刚写了这个小类来生成普通随机数...这是我需要做的检查的一个不错的起点。 (这些套装将以“钟形”分布 种子将随机设置,但是如果你想重新生成一个集合,你可以传递一些特定的种子,同样的集合将会产生。

玩得开心......

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个num组的平均值。这些值存储在类中,因此可以在实例化后访问它们。

_swarmii

答案 8 :(得分:2)

它为我工作new Random().nextInt(100); // MAX = number

它将给出0到99个随机数

示例::

import 'dart:math';
int MAX = 100;
print(new Random().nextInt(MAX));`

答案 9 :(得分:2)

让我用一个简单的骰子滚动应用程序的形式来解决这个问题,该应用程序会在点击时将6个骰子脸部图像中的1个随机调用到屏幕上。

首先声明一个生成随机数的变量(不要忘记导入dart.math)。然后,声明一个将初始随机数在1到6之间的约束范围内解析的变量作为Integer。

两个变量都是静态私有变量,以便一次初始化。这并不是什么大问题,但是如果必须初始化一大堆随机数,这将是一个好习惯。

static var _random = new Random();
static var _diceface = _random.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,
              ),
          )
        ),

每次点击屏幕都会生成一个新的随机数,并引用该数字以选择要选择的骰子头像。

我希望这个例子有帮助:)

Dice rolling app using random numbers in dart

答案 10 :(得分:1)

使用这个库http://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dart提供了一个很好的随机生成器,我认为它将被包含在sdk中很快希望它有所帮助

答案 11 :(得分:1)

您可以通过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(100) + 10; // from 10 upto 99 included

答案 12 :(得分:0)

对我来说,最简单的方法是:

import 'dart:math';
Random rnd = new Random();
r = min + rnd.nextInt(max - min);
//where min and max should be specified.

感谢here.中的@ adam-singer解释

答案 13 :(得分:0)

使用Dart生成器,该生成器用于生成数字或值的序列。

 main(){ 
       print("Sequence Number");
       oddnum(10).forEach(print);
     }
    Iterable<int> oddnum(int num) sync*{
     int k=num;
     while(k>=0){
       if(k%2==1){
        yield k;
       }
      k--;
     } 
}