如何使用Dart生成随机数?
如何使用Dart生成随机数?
Answers:
使用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进行了测试。
/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刚刚添加到 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
刚刚写了这个小类来生成标准随机数...这是我需要做的检查的一个不错的起点。(这些集合将分布在“钟形”曲线上。)种子将被随机设置,但是如果您希望能够重新生成一个集合,则只需传递一些特定的种子即可生成相同的集合。
玩得开心...
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 nums集的平均值。这些值存储在类中,因此可以在实例化之后对其进行访问。
_swarmii
使用此库http://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dart提供了一个很好的随机生成器,我认为它将很快包含在sdk中,希望对您有所帮助
让我用一个简单的骰子滚动应用程序的形式来举例说明这个问题,该应用程序会在点击时将6个骰子脸部图像中的1个随机调用到屏幕上。
首先声明一个生成随机数的变量(别忘了导入dart.math)。然后将一个将初始随机数解析为1到6之间的约束的变量声明为Integer。
为了初始化一次,这两个变量都是静态私有的,这不是什么大问题,但是如果必须初始化一大堆随机数,这将是一个好习惯。
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,
),
)
),
每次您点击屏幕时,都会生成一个新的随机数,并引用该数字以选择要选择的骰子脸部图像。
我希望这个例子有帮助:)