每当我在类文件中调用特定方法时,我都会返回一个随机值,但每次再次调用该方法时它会返回相同的值。
例如
int CommuterTrain::getRandNumber(int maximumValue)
{
srand(unsigned(time(NULL)));
int maximum = maximumValue;
return rand()%maximum+1;
}
void CommuterTrain::loadRiders()
{
int passengers = getRandNumber(350);
currentRiders += passengers;
if (currentRiders > maxCapacity) {
cout << "The train has reached capacity! \nSome people were left at the station."
<< endl;
currentRiders = maxCapacity;
}
else {
cout<<passengers<<" pax have entered the vessel"<<endl;
}
}
假设发电机产生的数量为215人。当我再次调用该方法时,它不会再次随机化,每次最终都会使用215。
是生成器中的问题,还是以下方法?
答案 0 :(得分:1)
你继续重新种植它。使用相同的种子(假设您的计算机比1920年更新,因此可以在第二个†下执行您的代码)。别这么做。
这意味着你一遍又一遍地重新生成并重新启动相同的伪随机序列。因此,每次调用rand()
时,您都会在该序列中拉出相同的第一个值。
在您的计划中仅种子 。
例如,您可以将srand
来电置于main
。
†如果你开始执行它可能需要大约一秒钟,就像新的第二个开始一样。整数逻辑和所有这些。无论
答案 1 :(得分:0)
你的问题是,你在每次调用你的函数时播种随机引擎:
int CommuterTrain::getRandNumber(int maximumValue)
{
srand(unsigned(time(NULL))); // <<< This line causes your problems
int maximum = maximumValue;
return rand()%maximum+1;
}
在调用time()
函数之间,当前getRandNumber()
结果不太可能发生显着变化。
您应该在功能外部之后调用srand(time(NULL))
(例如,在CommuterTrain
类构造函数中,或者仅在main()
更好)。