c++ - 返回相同值的随机数生成器(C++)

标签 c++ class random dynamic-memory-allocation

<分区>

我一直在尝试为动态分配的实例数组生成一个随机数,但每次我尝试时,每个实例总是被赋予完全相同的值:

//IN MAIN
Enemy* enemy;
int num;
std::cout << "How many enemies would you like there to be?" << std::endl;
std::cin >> num;
enemy = new Enemy[num];

for (int q = 0; q < num; q++)
{
    enemy[q].setAngle();
}

for (int q = 0; q < num; q++)
{
    std::cout << enemy[q].getAngle() << std::endl;
}

//IN THE ENEMY CLASS
void Enemy::setAngle()
{
    srand(time(NULL));
    angle = rand() % 360 + 1;
}

int Enemy::getAngle()
{
    return angle;
}

输出将始终是 1 到 360 之间的数字,但是当调用 getAngle() 时,输出只是在多行上重复的相同数字。为什么会这样?我做错了什么,我该如何解决?

提前致谢

最佳答案

每次调用 setAngle 时,您都在为随机数生成器播种。如果这一切都在一秒钟内发生(这是 time 的分辨率),它将始终使用相同的值作为种子,因此从相同的伪随机值开始。相反,您应该只在程序开始时调用一次 srand

关于c++ - 返回相同值的随机数生成器(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21955265/

相关文章:

c++ - 当我终止应用程序时无法保存写入文件的数据

c++ - 无法访问类中声明的私有(private)成员

c++ - 我如何判断 pthread_self 是否是进程中的主(第一个)线程?

Javascript坐标之间的随机数

c++ - OpenGL 和 SFML 时钟未正确重启

Java:如何在 JVM 加载类时拦截它们

Java - 类无法看到其他类中的对象

c++ - 静态库(obj 文件)之间共享的类的实例

perl - Perl 5 中的哈希随机化

java - 使用 Random.setSeed 的重要性是什么?