大家帮我看看首先这是一个生成随机数的方法:
public static string GetRandom(int Sum,int Len)
{
string[] s = {"1","2","3","4","5","6","7","8","9"};
Random r = new Random();
string n = null;
int j = 0;
string p;
for(int i=0;i<Len;i++)
{
p =s[r.Next(0, s.Length)].ToString();
n+=p;
j+= Convert.ToInt32(p);
}
if(j>=Sum)
{
   return GetRandom(Sum,Len);
}
return n; }让我百思不得其解的地方在下面的方法中调用上面的方法时,居然生成的随机数是一样的!!
public static void Test()
{
for(int i=0;i<8;i++)
{
base.Response.Write(GetRandom(420,50));
}
}想请大家帮忙看看。在线等!!!

解决方案 »

  1.   

    for (int i = 0; i < 8; i++)
    {
    Random rnd = new Random(i * unchecked((int)DateTime.Now.Ticks) + i);
    int r2 = rnd.Next();
    Random rm1 = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i); ;
    Response.Write(s[rm1.Next(0, s.Length)]);
    }
      

  2.   

    可以将Random 定义成一个全局变量,在函数体外实例化...这样可以得到不同的..
      

  3.   

    to:net_lover(【孟子E章】) 我不是说在取随机数的时候生成的数字全是一样是在第二步时:public static void Test()
    {
    for(int i=0;i<8;i++)
    {
    base.Response.Write(GetRandom(420,50));//在这里获取随机数并输出。就会发现输出的8组数据全都是一样的!!!!
    }
    }真是搞不明白。为什么单次可以获取。但放在循环体中时却会得出一样的数据来!!!
      

  4.   

    TO:真是搞不明白。为什么单次可以获取。但放在循环体中时却会得出一样的数据来!!!因为Random r = new Random();
    使用的是使用与时间相关的默认种子值,由于执行速度比较快,所以导致每次的种子值都一样,所以结果也就一样..
      

  5.   

    自己做个实验应该就明白了...public static void Test()
    {
    for(int i=0;i<8;i++)
    {
    base.Response.Write(GetRandom(420,50));
    //每调用一次后,休眠10ms
    System.Threading.Thread.Sleep(10);
    }
    }这样得到的结果应该就不会一样了...
      

  6.   

    to:真是搞不明白。为什么单次可以获取。但放在循环体中时却会得出一样的数据来!!!C#生成的伪随机数应当和时间有关系。单步调试时,两次随机数产生的间隔特别长。一般大于1秒。但是程序运行的时候两次取得时间间隔太近了。可能小于1ms所以出来的就是一样的了。我曾经连续5万以上的随机数,每10个一组(每组由一个过程产生)。每组数据几乎都是一样的,但是组间的数据一般都是不同的。
    当然我相信随机数的产生可能不仅与时间有关,可能还和进程,或线程标识有关。
      

  7.   

    static Random r = new Random();
    把r做成类的静态变量
      

  8.   

    不带参数的构造是以时间为种子的(MSDN原话),你在循环中,时间相隔太短,所以种子是一样的,种子一样的话,产生的随机数序列是一样的。楼上注意,随机数序列只和种子相关,起码和线程无关。我写过多线程调用,只要种子一样,序列还是一样的
      

  9.   

    to:chsl918(Story Book)  HtoFire(冬天里的一把火)
    谢谢,你的分析很精辟。虽然我曾经怀疑过类似的原因,但是因为我想两次数据获取之间的时间间隔应该不至于影响最终结果,所以把这个结论否决了。这都归结于我自己的理论知识不够扎实to: liujia_0421(SnowLover) 
    很感谢你的解答,你的解答无疑让我证实了上面的朋友说的结论是正确的并且直接的解决了我的问题。谢谢!to:net_lover(【孟子E章】)
    我非常感谢你能在百忙之中给我建议。谢谢最后:感谢所有给我建议的朋友们。谢谢你们。我的问题才得以解决!!!