我正在尝试创建不同的对象,每个对象都有一个带有随机值的数字结构数组。编译后,我在每个对象的数组中得到相同的数字序列 有没有办法在数组中创建具有唯一数字序列的不同对象?
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
struct storeTwoValue
{
int x;
int y;
};
class practice{
public:
storeTwoValue storageArray[10];
void valueGenerator()
{ srand(time(NULL));
for (int i = 0; i< 10; i++)
{
storageArray[i].x = rand()%10 +1;
storageArray[i].y = rand()%7 + 1;
}
}
void print()
{
cout<<"x"<<" "<<"y"<<endl;
for (int i = 0; i< 10; i++)
{
cout<<storageArray[i].x <<" ";
cout<< storageArray[i].y << endl;
}
cout<<endl;
}
};
int main()
{
for(int i=0; i<3; i++)
{ practice A;
A.valueGenerator();
A.print();
}
return 0;
}
答案 0 :(得分:1)
将srand()
电话移至主电话,即仅执行一次
您使用它的方式是,每个对象都会以太短的顺序调用它,至少如果您在开始时创建/初始化它们。即它们全部初始化,而time(0)
给出相同的种子,这意味着伪随机数生成器基本上被重置(从相同的初始值开始相同的序列)。
要验证这一点,您可以(在移动srand调用之前)扩展循环。如果需要足够的时间,以便time(0)
可靠地具有不同的值,您将看到组内具有相同值的对象组,但不同组之间会有不同。
调用srand()
应该只完成一次,更频繁地调用它不会改善随机性。