首页 > 解决方案 > 在 Dart 中生成唯一的随机数

问题描述

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

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

int rand1 = Random().nextInt(16);
int rand2 = Random().nextInt(16);
if(rand1 == rand2)
  // generate new random 

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

标签: randomflutterdart

解决方案


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

 var random = Random();
 var n1 = random.nextInt(16);
 var n2 = random.nextInt(15);
 if (n2 >= n1) n2 += 1;

这确保了第一个数字可以假定所有 16 个值,第二个数字可以假定其余 15 个值中的任何一个,并且在随机生成器允许的情况下具有尽可能均匀的分布。

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

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


推荐阅读