如何在飞镖中生成两个不同的随机数?
我使用以下代码生成了两个随机数。
<div style="height: 100%">
<img src="https://s.cdpn.io/3/kiwi.svg" width="50" height="50" style="float: right"/>
<img src="https://s.cdpn.io/3/kiwi.svg" width="50" height="50" style="float: right; margin: 0 0 0 15px"/>
<p style="font-size: 20px; float: right; margin: 2px 0 0 0">DreamGlass</p>
<br/>
<p style="font-size: 20px; float: right">Ola</p>
</div>
int rand1 = Random().nextInt(16);
int rand2 = Random().nextInt(16);
如何在if(rand1 == rand2)
// generate new random
之前生成新的随机数?
答案 0 :(得分:2)
如果您需要在固定范围内有两个不同随机数,那么最简单的方法是:
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加1,将范围[n1 .. 14]转换为[(n1 + 1) .. 15]。
您可以这样做以获取更多的数字,但是您必须进行更多的测试和添加。
答案 1 :(得分:1)
我建议您使用其他方法,循环可能会很痛苦。
// 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];
答案 2 :(得分:0)
一个可能的解决方案是从一个哈希集中循环并记录下来,从而解决了很多问题(例如千分之五十)。
我从代码中删除了它,但是类似:
var hashSet = HashSet();
for (var i = 0; i < boardSize; i++) {
words.add([]);
for (var j = 0; j < boardSize; j++) {
Random _random = new Random();
String wordToAdd = abstractPossibleWords[_random.nextInt(abstractPossibleWords.length)];
while (hashSet.contains(wordToAdd)) {
wordToAdd = abstractPossibleWords[_random.nextInt(abstractPossibleWords.length)];
}
words[i].add(wordToAdd);
}
}
答案 3 :(得分:0)
生成 0-49 范围内的任意 5 个唯一随机数
List<int> numberList=[];
Random random = new Random();
while(numberList.length<5){
int random_number = randomizer.nextInt(50);
if (!numberList.contains(random_number)){
numberList.add(random_number);
}
}
答案 4 :(得分:-1)
可能对您有用。
'max'是排他的。唯一的结果编号在返回列表中。
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;
}