如何使用Dart生成随机数?
使用dart:math中的随机类:
import 'dart:math';
main() {
var rng = Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
在撰写本文时,这段代码已经使用Dart VM和dart2js进行了测试。
如果你需要加密安全的随机数(例如加密),并且你在浏览器中,你可以使用DOM加密API:
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
这适用于Dartium、Chrome和Firefox,但可能不适用于其他浏览器,因为这是一个实验性的API。
另一种解决方案可以使用以下代码random。这个类应该与种子一起使用。它提供了一个熟悉的。net接口,它是从mono的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个nums集的平均值。值存储在类中,以便在实例化后可以访问它们。
_swarmii
下面是生成随机数列表的代码片段
import 'dart:math';
main() {
var rng = new Random();
var l = new List.generate(12, (_) => rng.nextInt(100));
}
这将生成一个包含从0到99(包括)的12个整数的列表。
一个安全的随机API刚刚添加到dart:math
new Random.secure()
飞镖:数学 Random添加了一个安全构造函数,返回加密安全的 随机发生器,从熵源提供的读取 为每个生成的随机值嵌入。
它委托给浏览器中的window.crypto.getRandomValues()和操作系统(如服务器上的urandom)
你可以通过在dart:math库中的随机类对象Random . nextint (max)来实现它。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
对我来说,最简单的方法是:
import 'dart:math';
Random rnd = new Random();
r = min + rnd.nextInt(max - min);
//where min and max should be specified.
感谢@adam-singer的解释。
无法评论,因为我刚刚创建了这个帐户,但我想确保指出,@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
它为我工作new Random().nextInt(100);// MAX = number
它会给出0到99的随机数
Eample::
import 'dart:math';
int MAX = 100;
print(new Random().nextInt(MAX));`
试试这个,你可以控制最小/最大值:
注意,您需要导入省道数学库。
import 'dart:math';
void main() {
int random(int min, int max) {
return min + Random().nextInt(max - min);
}
print(random(5, 20)); // Output : 19, 5, 15.. (5 -> 19, 20 is not included)
}
让我用一个实际的例子来回答这个问题,这个例子是一个简单的骰子滚动应用程序,当点击时,它会在屏幕上随机调用6个骰子面部图像中的一个。
首先声明一个生成随机数的变量(别忘了导入dart.math)。然后声明一个变量,将约束在1到6之间的初始随机数解析为Integer。
为了只初始化一次,两个变量都是静态私有的。这不是一个很大的问题,但如果你必须初始化一大堆随机数,这将是一个很好的实践。
static var _random = new Random();
static var _diceface = _random.nextInt(6) +1 ;
现在创建一个带有ClipRRect的手势检测小部件,以便在点击时将六个骰子面部图像中的一个返回到屏幕上。
GestureDetector(
onTap: () {
setState(() {
_diceface = _random.nextInt(6) +1 ;
});
},
child: ClipRRect(
clipBehavior: Clip.hardEdge,
borderRadius: BorderRadius.circular(100.8),
child: Image(
image: AssetImage('images/diceface$_diceface.png'),
fit: BoxFit.cover,
),
)
),
每次点击屏幕时,都会生成一个新的随机数,并引用该数字来选择所选择的骰子面部图像。
骰子滚动应用程序使用随机数在镖
使用省道发生器,用于产生数字或值的序列。
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--;
}
}
使用'dart:math'库中的类Random()。
import 'dart:math';
void main() {
int max = 10;
int RandomNumber = Random().nextInt(max);
print(RandomNumber);
}
这将生成并打印一个从0到9的随机数。
您可以简单地用这种方式生成 有一个名为Random()的类;
你可以用它来生成随机数
Random objectname = Random();
int number = objectname.nextInt(100);
// it will generate random number within 100.
该方法生成随机整数。最小值和最大值都包含在内。
确保你在文件中添加了这一行:import 'dart:math';然后你可以添加并使用这个方法:
int randomInt(int min, int max) {
return Random().nextInt(max - min + 1) + min;
}
因此,如果你调用randomInt(-10,10),它将返回一个介于-10和10之间的数字(包括-10和10)。
这对我很有用
import 'dart:math';
void main() {
Random random = Random();
int randomNumber = random.nextInt(5) + 1;
print(randomNumber);
}
把数字5换成你想要的结果
推荐文章
- 在Flutter中向有状态小部件传递数据
- 如何在c++中生成一个随机数?
- 未处理异常:ServicesBinding.defaultBinaryMessenger在绑定初始化之前被访问
- 颤振-换行文本
- 如何在Dart中四舍五入到小数点后的给定精度程度?
- 添加一个启动屏幕颤振应用程序
- 在flutter中等同于wrap_content和match_parent ?
- 随机行选择在熊猫数据框架
- 多行文本字段在扑动
- 在Dart中命名参数和位置参数之间有什么区别?
- 如何用Dart将字符串解析为数字?
- 如何在颤振的一些延迟后运行代码?
- 从文件中读取随机行有什么简单的方法?
- 在构建过程中调用setState()或markNeedsBuild
- 我如何添加阴影的小部件颤振?