类中随机数生成器的问题

时间:2013-11-17 17:08:21

标签: c++ arrays

首先,这可能是完全垃圾,因为我是C ++类的新手,之前从未使用过随机数生成器。但这是我的尝试。它在我想要的值之间生成一个随机数,很好。但是当通过数组输出它们时,所有随机值都是相同的。

RandomNumberGenerator.h

#pragma once
#include <iostream>
#include <cstdlib>
#include <ctime>


class RandomNumber
{
public:
void randomNumber();
int actualRandomNumber;
};

RandomNumberGenerator.cpp

#include "RandomNumberGenerator.h"

void RandomNumber::randomNumber()
{
srand (time(NULL));

actualRandomNumber = rand() % 66 + 1;
}

Game.h

#include "RandomNumberGenerator.h"

class Game
{
private:
int myNumbers[6];


public:
void createGame();
};

Game.cpp

#include "Game.h"

void Game::createGame()
{
RandomNumber create;

std::cout << "Welcome to your game!" << std::endl;
for (int i = 0; i < 6; i++)
{
create.randomNumber();
myNumbers[i] = create.actualRandomNumber;   
}

for (int i = 0; i < 6; i++)
{
std::cout << myNumbers[i] << std::endl;
}
}

主要

#include "Game.h"
#include "RandomNumberGenerator.h"

int main()
{
Game play;

play.createGame();

system("pause");
return 0;
}

提前感谢任何时间。

2 个答案:

答案 0 :(得分:3)

每次拨打srand(time(NULL))时,您都会根据每秒只更改一次的值来设置序列的起点,因此您的号码每秒只会更改一次(与呼叫次数无关)。

因此,只需拨打srand()一次即可修复您的代码。

请注意,rand()actualRandomNumber = rand() % 66 + 1;对于他们的“随机性”(why)都非常糟糕。 请改用C++ STL,考虑页面底部的示例(您希望统一的int分布)。

编辑:错字并链接到OneC ++ Talk

答案 1 :(得分:2)

伪随机数生成器以特定数字开始,然后根据第一个数字生成序列。

当第一个数字相同时,输出顺序将相同。

要在每次启动程序时生成不同的序列,我们的想法是使用程序的开始时间相对于特定日期(以毫秒为单位)。

因此,代码中的错误是您将srand(time(NULL))放在函数randomnumber()中并在循环中调用它。由于CPU速度很快,time(NULL)(序列中的第一个数字)将以毫秒为单位返回相同的值。因此你的序列相同。 要在srand(time(NULL))

中解决此地点main()