Random.Next()总是给出相同的结果

时间:2012-02-08 18:42:05

标签: .net c#-4.0 random

  

可能重复:
  Random number generator not working the way I had planned (C#)

我在基本的C#编程方面经验丰富,目前正在制作压路机。此应用程序最多可以掷四个骰子。我遇到的问题是骰子总能产生相同的结果。我使用一种方法,其中随机数生成器生成一到六的数字,然后选择适当的图片。我为每个图像框重复下面的方法,因为允许用户输入他们想要掷骰子的数量。我的问题是骰子每次都会生成相同的图片。我做错了什么?

    public Image displaypic(PictureBox box)
    {
        string picchoice;
        int number;

        Image picture = box.Image;

        //Prevents Redundant Images
        Image displaying = box.Image;
        do
        {
            //picks a die to display     
            Random rand = new Random();
            number = rand.Next(1, 7);

            picchoice = number.ToString();

            //select an image from the image selection method
            picture = diepic(picture, picchoice);

        }
        while (picture == displaying);

        //return image
        return picture;
  }

1 个答案:

答案 0 :(得分:8)

随机数不是真正随机的(它们被称为伪随机) - 它们是基于预定算法选择的,该算法使用“种子值”来选择数字。默认情况下,这是DateTime.Now.Ticks

您的应用程序运行速度太快,以至于它为Random的每个实例使用相同的种子。您可以通过在循环外实例化Random对象来解决此问题:

Random rand = new Random();
do
{
    //picks a die to display     
    number = rand.Next(1, 7);

    picchoice = number.ToString();

    //select an image from the image selection method
    picture = diepic(picture, picchoice);

}
while (picture == displaying);

有关此内容的详细信息,请参阅此处的“备注”部分:http://msdn.microsoft.com/en-us/library/ctssatww.aspx