在没有参数的情况下调用构造函数时生成随机数的问题
Problems with generate random numbers when constructor is called with no arguments
我正在尝试创建一个强力球模拟器,其中包含名为 PowerballTicket
和 PowerballLottery
的类。对于PowerballTicket
,如果调用构造函数时没有参数,则需要生成6个随机数(如真实强力球中的快速选择选项)。到目前为止,我所拥有的是
PowerballTicket::PowerballTicket(int x1, int x2, int x3, int x4, int x5, int x6)
{
RandomNumber randNum (1, 69);
x1 = randNum.random();
do {
x2 = randNum.random();
}while (x1 == x2);
do {
x3 = randNum.random();
}while (x3 == x1 || x3 == x2);
do {
x4 = randNum.random();
}while (x4 == x1 || x4 == x2 || x4 == x3);
do {
x5 = randNum.random();
}while (x5 == x1 || x5 == x2 || x5 == x3 || x5 == x4);
RandomNumber randNumPower (1, 23);
mpowerball = randNumPower.random();
mball1 = x1;
mball2 = x2;
mball3 = x3;
mball4 = x4;
mball5 = x5;
mpowerball = x6;
}
int PowerballTicket::getball1()
{
return mball1;
}
int PowerballTicket::getball2()
{
return mball2;
}
int PowerballTicket::getball3()
{
return mball3;
}
int PowerballTicket::getball4()
{
return mball4;
}
int PowerballTicket::getball5()
{
return mball5;
}
int PowerballTicket::getpowerball()
{
return mpowerball;
}
我不确定这是否是拥有具有 6 个有效随机数以及每个随机数的访问器方法的票证的正确方法,而且我也不确定如何在构造函数中调用有效参数和构造函数中未调用参数之间切换。
RandomNumber
是一个生成随机数的类,我相信它有效。
我不确定这是否是拥有具有 6 个有效随机数以及每个随机数的访问器方法的票证的正确方法,而且我也不确定如何在构造函数中调用有效参数和构造函数中未调用参数之间切换。
最简单的方法是通过两个构造函数区分这两个条件。使用默认构造函数从生成的随机数构造票证,使用非默认构造函数使用用户提供的 6 个数字。
到目前为止,您拥有的东西不能没有数字来称呼。提供的构造函数不能用作默认构造函数。如果为x1
提供了默认参数(例如在类定义中)x6
,那么它可以,但代码没有暗示这一点。
原始代码覆盖提供的数字,这样做没有什么意义,要么应该使用数字,要么应该生成它们。
// default constructor...
PowerballTicket::PowerballTicket()
: mball1(0), mball2(0), mball3(0), mball4(0), mball5(0), mpowerball(0)
// you could exclude the above initialisations, the will be written to below
{
// generate the random numbers
RandomNumber randNum (1, 69);
mball1 = randNum.random();
do {
mball2 = randNum.random();
}while (mball1 == mball2);
do {
mball3 = randNum.random();
}while (mball3 == mball1 || mball3 == mball2);
do {
mball4 = randNum.random();
}while (mball4 == mball1 || mball4 == mball2 || mball4 == mball3);
do {
mball5 = randNum.random();
}while (mball5 == mball1 || mball5 == mball2 || mball5 == mball3 || mball5 == mball4);
RandomNumber randNumPower (1, 23);
mpowerball = randNumPower.random();
}
PowerballTicket::PowerballTicket(int x1, int x2, int x3, int x4, int x5, int x6)
: mball1(x1), mball2(x2), mball3(x3), mball4(x4), mball5(x5), mpowerball(x6)
{
// use the numbers provided
}
默认构造函数生成数字,非默认构造函数使用为对象成员提供的数字。
使用代码;
PowerballTicket myNumbers(1, 2, 3, 4, 5, 6); // non-default constructor
PowerballTicket generatedNumbers; // default constructor
创建两个构造函数 1 个参数化,1 个空
如果调用空构造函数,则创建 6 个随机数并调用参数化构造函数
PowerballTicket::PowerballTicket()
{
RandomNumber randNum (1, 69);
x1 = randNum.random();
do {
x2 = randNum.random();
}while (x1 == x2);
do {
x3 = randNum.random();
}while (x3 == x1 || x3 == x2);
do {
x4 = randNum.random();
}while (x4 == x1 || x4 == x2 || x4 == x3);
do {
x5 = randNum.random();
}while (x5 == x1 || x5 == x2 || x5 == x3 || x5 == x4);
RandomNumber randNumPower (1, 23);
mpowerball = randNumPower.random();
PowerballTicket(x1,x2,x3,x4,x5, mpoerBall);
}
PowerballTicket::PowerballTicket(int x1, int x2, int x3, int x4, int x5, int x6)
{
//constructor already have value do what you want
mball1 = x1;
mball2 = x2;
mball3 = x3;
mball4 = x4;
mball5 = x5;
mpowerball = x6;
}
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 整数不会重复超过随机数
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- Rand() 没有显示随机数,请帮助我了解出了什么问题:)
- 随机数有问题
- 生成 32 位随机数时出现问题
- 有关使用 boost 生成正常随机数的问题
- 类中的随机数生成器出现问题
- C++循环中调用伪随机数生成器函数 - 常量种子问题
- 在没有参数的情况下调用构造函数时生成随机数的问题
- 生成随机数并插入已包含n个数的数组时出现性能问题
- 在Mac上使用Xcode用c++生成随机数的问题
- c++中随机数的播种问题
- 产生随机数的问题
- 用CUDA通过拒绝方法生成随机数.性能问题