在没有参数的情况下调用构造函数时生成随机数的问题

Problems with generate random numbers when constructor is called with no arguments

本文关键字:问题 随机数 构造函数 调用 参数 情况下      更新时间:2023-10-16

我正在尝试创建一个强力球模拟器,其中包含名为 PowerballTicketPowerballLottery 的类。对于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;
}