【发布时间】:2015-06-23 03:22:50
【问题描述】:
我想使用std::rand() 生成一个介于0 和amountOfNumbers 之间的数字,但生成的数字不能与上次生成的数字相同。
我写了这个函数:
void reroll() {
int newRand;
while (true) {
newRand = std::rand() % (amountOfNumbers);
if (newRand == lastNumber) {
continue;
}
lastNumber = newRand;
break;
}
// do something with newRand
// ...
}
amountOfNumbers 只是一个定义上限的 int (> 1)(例如 5,因此可能的数字范围是 0 到 4)。 lastNumber 最初是 -1 存储最后生成的数字。
我想知道是否有更好的方法来写这个。
到目前为止,该功能似乎可以正常工作,但我不确定我的代码是否完美无缺……看起来有点糟糕。那个while (true)让我有点不安。
【问题讨论】:
-
你能详细说明你为什么要这样做(有效地去随机化你的随机数)吗?
-
有更好的random engines 比
std::rand()可用,可能没有这些问题。 -
您是否想生成连续的数字,然后改为
random_shuffle? -
那么,第三个数字和第一个数字匹配可以吗?
-
@EdHeal “请理解随机。”哦,我愿意。只要不是连续两次生成相同的数字,随机生成的数字就可以了。