flutter 在Dart中生成唯一随机数

quhf5bfb  于 2023-01-02  发布在  Flutter
关注(0)|答案(6)|浏览(471)

如何在dart中生成两个不同的随机数?
我用下面的代码生成了两个随机数。

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

如何生成rand1 != rand2之前的新随机数?

goucqfw6

goucqfw61#

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

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]中。
你可以对更多的数字这样做,但是你必须做更多的测试和加法。

b4lqfgs4

b4lqfgs42#

我建议您使用不同的方法,循环可能会很痛苦。

// 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];
9rnv2umw

9rnv2umw3#

这是最简单的方法:

import 'dart:math';

void main() {
  int rand1 = Random().nextInt(16);
  int rand2 = Random().nextInt(16);

  while(rand1 == rand2){
  rand1 = Random().nextInt(16);
  rand2 = Random().nextInt(16);
  }
  
  print('$rand1 $rand2');
}
6qfn3psc

6qfn3psc4#

生成0-49范围内的任意5个唯一随机数

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);
    }
  }
eblbsuwk

eblbsuwk5#

从多个中提取多个(例如,从数千个中提取50个)的一个可能的解决方案是使用散列集进行循环和记忆。
我从我的代码中提取了这个,但是类似于:

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);
  }
}
4xrmg8kj

4xrmg8kj6#

也许对你有用。
'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;
  }

相关问题