在Dart中生成唯一的随机数

时间:2019-08-26 11:43:23

标签: random flutter dart

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

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

<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 之前生成新的随机数?

5 个答案:

答案 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;
  }