在下面的代码中,我在for循环里想输出100个随机的8位字符串,但是显示的结果总是100个重复的值,很疑惑!
贴出来大家讨论一下,如果大家有遇到过这样的问题的,可以解答一下,谢谢了!
    protected void Page_Load(object sender, EventArgs e)
    {
        string tempsss = string.Empty;
        for (int i = 0; i < 100; i++)
        {
           tempsss += GenerateRandom(8)+"<br>";
        }
        Response.Write(tempsss);
    }
    private static char[] constant = 
        {
        '0','1','2','3','4','5','6','7','8','9',   
        'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',   
        'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
        '@','#','$','%','&','*'
        };
    public static string GenerateRandom(int length)
    {
        System.Text.StringBuilder newRandom = new System.Text.StringBuilder(68);
        Random rd = new Random();
        for (int i = 0; i < length; i++)
        {
            newRandom.Append(constant[rd.Next(68)]);
        }
        return newRandom.ToString();
    }

解决方案 »

  1.   

    ooooo,发现了,调试的时候是一步一步执行,但是没有调试的时候是一下子就行了,所以在调试时数据会更新,但是直接运行时,可能是for太快了,根本没有执行GenerateRandom。所以都一样我想想
      

  2.   

    protected void Page_Load(object sender, EventArgs e)
        {
            string tempsss = string.Empty;
            Random rd = new Random();
            for (int i = 0; i < 100; i++)
            {
                StringBuilder newRandom = new StringBuilder();
                for (int j = 0; j < 8; j++)
                {
                    newRandom.Append(constant[rd.Next(68)]);
                }
                tempsss = newRandom.ToString() + "<br>" + tempsss;
            }     
            Response.Write(tempsss);
        }
        private char[] constant = 
            {
            '0','1','2','3','4','5','6','7','8','9',   
            'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',   
            'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
            '@','#','$','%','&','*'
            };
     //   public string GenerateRandom(int length)
     //   {
     //       System.Text.StringBuilder newRandom = new System.Text.StringBuilder(68);
     //       Random rd = new Random();
     //       for (int i = 0; i < length; i++)
     //       {
       //         newRandom.Append(constant[rd.Next(68)]);
       //     }
          //  return newRandom.ToString();
       // }
      

  3.   

    Random rd = new Random();
            for (int i = 0; i < length; i++)
            {
                newRandom.Append(constant[rd.Next(68)]);
            }
    这里的问题. 
       Random 实例化的速度太快了 .. 你每次调用的时候生成的都是差不多. 你试试下面的代码就知道了. 
    //用这生成的大部分一样
    for(int i=0 ; i<10;i++)
    {
       Console.WriteLine(new Random().Next(68).ToString());
    }
    Console.WriteLine("------------------------");
    //这个生成的基本都是不一样的
    Random r = new Random();
    for(int i=0 ; i<10;i++)
    {
       Console.WriteLine(r.Next(68).ToString());
    }