#include <iostream>
#include <string>
#include <time.h>
using namespace std;
class A{
int x;
public:
void setX(){
srand( time(NULL));
x = rand() % 15;
}
int getX(){
return x;
}
};
int main()
{
A dizi[5];
for(int i = 0; i < 5;i++){
dizi[i].setX();
cout<<dizi[i].getX()<<endl;
}
}
或
#include <iostream>
#include <string>
#include <time.h>
using namespace std;
class A{
int x;
public:
void setX(){
srand( time(NULL));
x = rand() % 15;
}
int getX(){
cout<<x<<endl;
}
};
int main()
{
A dizi[3];
dizi[0].setX();
dizi[1].setX();
dizi[2].setX();
dizi[0].getX();
dizi[1].getX();
dizi[2].getX();
}
x始终打印相同的值。如何为数组的每个对象分配不同的随机值。
我尝试过srand(time(0))和srand(time(NULL))
但他们没有工作。
每个类实例产生相同的随机值,为什么?
答案 0 :(得分:3)
来自C ++文档:http://www.cplusplus.com/reference/cstdlib/srand/
对于调用srand时使用的每个不同的种子值, 可以预期伪随机数发生器产生不同的 在随后的rand调用中继续产生结果。
使用相同种子的两个不同初始化将生成 在随后的rand调用
中产生相同的连续结果
将srand()视为根据给定种子制作随机数列表。由于你不断给它提供相同的种子,所以所有的rand()调用都获得了列表中的第一个元素。解决方案只是调用srand()一次,并在每次要为X赋值时使用一个rand()调用