C#中的随机数

时间:2010-10-15 18:33:30

标签: c#

当我尝试运行应用程序时,我收到以下错误我确信它很简单,但我没有看到它。当我点击我标记为Play的按钮时,我正在尝试这样做。我想调用一个名为randomnumber的方法。然后我希望结果显示在lblPickFive_1中。 我有2x2,Pick5和强力球。每个随机数将显示在我自己创建的标签中。

现在我只是想通过生成随机数并将其显示在一个标签中然后我将移动到其余部分。如果我不能弄明白其余的话,我肯定会发布更多问题。

错误1方法'RandomNumber'的重载没有'0'参数

using System;
using System.Windows.Forms;

namespace LotteryTickets
{
public partial class Form1 : Form
{
    /// <summary>
    /// no-args Constructor
    /// </summary>
    public Form1()
    {
        InitializeComponent();

    }


    #region "== Control Event Handlers =="
    private void Form1_Load(object sender, EventArgs e)
    {
        ClearWinningNumbers();
    }


    #endregion "== End Control Event Handlers =="


    #region "== Methods ==";
    /// <summary>
    /// Clears the text inside the winning number "balls"
    /// </summary>
    private void ClearWinningNumbers()
    {
        this.lblPickFive_1.Text = "";
        this.lblPickFive_2.Text = "";
        this.lblPickFive_3.Text = "";
        this.lblPickFive_4.Text = "";
        this.lblPickFive_5.Text = "";

        this.lblTwoByTwo_1.Text = "";
        this.lblTwoByTwo_2.Text = "";

        this.lblPowerball_1.Text = "";
        this.lblPowerball_2.Text = "";
        this.lblPowerball_3.Text = "";
        this.lblPowerball_4.Text = "";
        this.lblPowerball_5.Text = "";

        this.lblPowerball_PB.Text = "";
    }
    #endregion "== End Methods ==";

    private void cblTwoByTwo_2_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    private void cblTwoByTwo_1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    private void btnPlay_Click(object sender, EventArgs e)
    {
        RandomNumber();

    }

    private void lblPickFive_1_Click(object sender, EventArgs e)
    {

    }
    private void RandomNumber(int min, int max)
    {
        int num = new Random().Next(min, max);
        lblPickFive_1.Text = num.ToString();
    }
    }
}

6 个答案:

答案 0 :(得分:6)

首先,每次想要一个新的随机数时,都不应该新建一个随机数生成器。您应该将生成器设置为静态或成员变量,并为每个新数字引用它。

其次,您必须将最小值和最大值传递给RandomNumber方法。

答案 1 :(得分:3)

嗯,您的代码与错误不符,但请看一下:

private void btnPlay_Click(object sender, EventArgs e)
{
    RandomNumber();
}

private void RandomNumber(int min, int max)
{
    int num = new Random().Next(min, max);
    lblPickFive_1.Text = num.ToString();
}

RandomNumber有两个参数minmax。您尚未在btnPlay_Click内的通话中指定任何内容。这就是编译器所抱怨的。将通话更改为:

RandomNumber(5, 10);

即使已修复,也不应每次都创建Random的新实例。碰巧的是,它不太可能在这种特殊情况下引起问题,因为它是由用户操作触发的,但您应该阅读my article on random numbers以查看问题是什么以及如何避免它。

答案 2 :(得分:1)

您需要传入值:

private void btnPlay_Click(object sender, EventArgs e)
{
    RandomNumber();

}

应该是:

private void btnPlay_Click(object sender, EventArgs e)
{
    RandomNumber(0, 50000);

}

答案 3 :(得分:0)

您的RandomNumber方法有两个参数。

如果要调用该方法,则需要传递两个参数。

答案 4 :(得分:0)

您在RandomNumber();中呼叫btnPlay_Click,但RandomNumber方法需要minmax

答案 5 :(得分:0)

设置一个Random对象并初始化一次。

class Form1
{
    ...
    Random rnd = new Random();
}

然后在每次需要时使用它

void RandomNumber(int min, int max)
{
    int num = rnd.Next(min, max);
    ...
}

每次调用new()时会发生什么事情,它会重新播种随机数,你可能会一遍又一遍地使用相同的数字。我发生了这件事,它杀了我