在 Dart 中生成唯一的随机数

Man*_*gle 5 random dart flutter

如何在 dart 中生成两个不同的随机数?

我使用下面的代码生成了两个随机数。

int rand1 = Random().nextInt(16);
int rand2 = Random().nextInt(16);
Run Code Online (Sandbox Code Playgroud)
if(rand1 == rand2)
  // generate new random 
Run Code Online (Sandbox Code Playgroud)

如何生成新的随机数直到rand1 != rand2

Cop*_*oad 8

我建议你采用不同的方法,循环可能会很痛苦。

// create a list say of 16 numbers. 
List list = List.generate(16, (i) => i);

// shuffle it 
list.shuffle();

// take the numbers now, they are always unique
int firstRandonNum = list[0];
int secondRandonNum = list[1];
Run Code Online (Sandbox Code Playgroud)


lrn*_*lrn 8

如果您需要在固定范围内有两个不同的随机数,那么最简单的方法是:

 var random = Random();
 var n1 = random.nextInt(16);
 var n2 = random.nextInt(15);
 if (n2 >= n1) n2 += 1;
Run Code Online (Sandbox Code Playgroud)

这确保了第一个数字可以采用所有 16 个值,第二个数字可以采用其余 15 个值中的任何一个,并且具有随机生成器允许的均匀分布。

对于 0..15 范围内的两个有序的不同数字,有 16 * 15 种可能的结果,并且您可能希望每个结果具有相同的概率。此代码通过随机选择第一个数字来实现此目的,然后通过确保第二个数字位于范围 [0 .. (n1 - 1)] 或范围内,将第二个数字选择为与第一个数字不同的数字之一。 [(n1 + 1) .. 15] ...通过选择范围 [0 .. 14] 中的数字并在 >= n1 时加一,将范围 [n1 .. 14] 移动到 [(n1 + 1) .. 15]。

您可以对更多数字执行此操作,但必须进行更多测试和添加。