// 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];
List<int> numberList = [];
Random randomizer = new Random();
while (numberList.length < 5) {
int random_number = randomizer.nextInt(50);
if (!numberList.contains(random_number)) {
numberList.add(random_number);
}
}
List<int> getRandomNums(int countOfNum, int max) {
int num = 0;
List<int> numList = [];
var random = Random();
int i = 0;
while ( i < countOfNum) {
int oldNum = num;
num = random.nextInt(max);
if (numList.contains(num)) continue;
numList.add(num);
i++;
}
return numList;
}
6条答案
按热度按时间goucqfw61#
如果你需要在一个固定的范围内有两个不同的随机数,那么最简单的方法是:
这确保了第一个数可以取所有16个值,而第二个数可以取剩余15个值中的任何一个,并且具有随机发生器所允许的均匀分布。
对于范围为0..15的两个有序的不同数字,有16 * 15个可能的结果,您可能希望每个结果的概率相等。然后通过确保第二个数在范围[0..(n1 - 1)]或范围[(n1 + 1).. 15]...通过在范围[0.. 14]中选取一个数字并在〉= n1时加1,将范围[n1.. 14]移动到[(n1 + 1).. 15]中。
你可以对更多的数字这样做,但是你必须做更多的测试和加法。
b4lqfgs42#
我建议您使用不同的方法,循环可能会很痛苦。
9rnv2umw3#
这是最简单的方法:
6qfn3psc4#
生成0-49范围内的任意5个唯一随机数
eblbsuwk5#
从多个中提取多个(例如,从数千个中提取50个)的一个可能的解决方案是使用散列集进行循环和记忆。
我从我的代码中提取了这个,但是类似于:
4xrmg8kj6#
也许对你有用。
'max'是独占的。唯一的结果号在返回列表中。