如何使随机数生成器正常工作

时间:2019-04-01 11:34:27

标签: c++ arrays class random

我的代码处理两个骰子(一个10面的“公平”骰子和一个20面的“公平”骰子),并使用类,数组和随机数生成器生成两个骰子及其总和的随机掷骰,但是所有我的代码显示为“ You roll:18”。那不是很随机。


#include <iostream>
#include <stdlib.h>

using namespace std;

class Dice
{
  private:
  int rollDice[2] = {};

  public:
  void setval1(int x)
  {
    rollDice[0] = x;
  }

  void setval2(int y)
  {
    rollDice[1] = y;
  }

  double getVal1()
    {
      return rollDice[0];
    }

  double getVal2()
  {
    return rollDice[1];
  }
};

int main()
 {
  Dice a;
  a.setval1(rand()%9+1);
  a.setval2(rand()%19+1);
  cout << "You rolled: " << a.getVal1() + a.getVal2();
}

1 个答案:

答案 0 :(得分:0)

来自documentation

  

您需要播种使用的伪随机数生成器   std :: rand()。如果在调用srand()之前使用rand(),则rand()   的行为就像是用srand(1)播种的。

     

每次rand()用相同的种子播种时,它必须产生   相同的值顺序。

在C ++中正确用法如下:

std::srand(std::time(nullptr)); // use current time as seed for random generator
int random_variable = std::rand();

如果您要进行特定的统计分布,则应查看标题随机documentation