生成唯一的多个随机数

时间:2012-10-25 21:11:12

标签: c++ arrays qt random

我想生成唯一的随机数,并在这些随机数的函数中添加项目。这是我的代码:

问题是当我验证生成的数字是否存在于代码为results.contains(randomNb)的数组中时:

   int nbRandom = ui->randoomNumberSpinBox->value();
   //nbRandom is the number of the random numbers we want
   int i = 1;
   int results[1000];
   while ( i < nbRandom ){
       int randomNb = qrand() % ((nbPepoles + 1) - 1) + 1;
       if(!results.contains(randomNb)){
           //if randomNb generated is not in the array...
           ui->resultsListWidget->addItem(pepoles[randomNb]);
           results[i] = randomNb;
           //We add the new randomNb in the array
           i++;
       }
   }

1 个答案:

答案 0 :(得分:1)

results是一个数组。这是一个内置的C ++类型。它不是类类型,也没有方法。所以这不起作用:

results.contains(randomNb)

您可能想要使用QList。像:

QList<int> results;

使用以下内容添加元素:

results << randomNb;

此外,代码中有一个off-by-one错误。您从1开始计数(i = 1)而不是0.这将导致错过最后一个数字。您应该将i初始化更改为:

int i = 0;

通过更改,您的代码将变为:

int nbRandom = ui->randoomNumberSpinBox->value();
//nbRandom is the number of the random numbers we want
int i = 0;
QList<int> results;
while ( i < nbRandom ){
    int randomNb = qrand() % ((nbPepoles + 1) - 1) + 1;
    if(!results.contains(randomNb)){
        //if randomNb generated is not in the array...
        ui->resultsListWidget->addItem(pepoles[randomNb]);
        results << randomNb;
        //We add the new randomNb in the array
        i++;
    }
}