random - 在 Dart 中生成唯一的随机数
问题描述
如何在飞镖中生成两个不同的随机数?
我使用下面的代码生成了两个随机数。
int rand1 = Random().nextInt(16);
int rand2 = Random().nextInt(16);
if(rand1 == rand2)
// generate new random
如何生成新的随机数直到rand1 != rand2
?
解决方案
如果您需要在固定范围内有两个不同的随机数,那么最简单的方法是:
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]。
您可以对更多数字执行此操作,但您必须进行更多测试和添加。
推荐阅读
- heroku - 使用 Heroku 部署 TelegramBot(Rust)
- functional-programming - clojure,如何减少重复代码(可能使用宏)
- ruby-on-rails - 在 Apple Mac M1 上的 docker ruby 映像中安装 mini_racer gem 期间 libv8 失败
- java - 如果我的 lst.get(count) 在 5 秒内低于或高于我的值,我想弹出警报对话框
- javascript - JavaScript 函数声音循环
- c++ - 当我使用 DirectMath 的 XM_CALLCONV 时,我是否必须同时编写声明和定义?
- matching - 匹配和标记
- sql-server - 无法筛选 SQL Server 查询中的空记录
- android-livedata - SingleLiveEvent post,如果多次调用,则仅调度最后一个事件(但我需要视图中的所有事件)
- html - 如何停止保证金崩溃