想利用C# 编写一个函数产生指定范围与个数的随机数组,
但是数组结果是每一个随机数都一样,不知道为什么?
难道是由于时间间隔太短导致种子都一样?
那如果想产生不重复的指定范围的随机数组应该怎么写呢?
代码如下:        public static int[] CreateRandom(int randomCount,int min,int max)
        {
            int[] randomArr = new int[randomCount];
            Random ran;
            for (int i = 0; i < randomCount; i++)
            {   //--这种方法产生的随机数全部一样...囧
                //long tick = DateTime.Now.Ticks;
                //ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
                //randomArr[i] = ran.Next(min,max);                //--这种方法产生的随机数也全部一样...囧
                int iSeed = 10;
                ran = new Random(iSeed++);
                randomArr[i] = ran.Next(min, max);
            }
            return randomArr;
        }
产生的结果类似以下:
调用:CreateRandom(13,50000,90000);
结果:76053,76053,76053,76053,76053,76053,76053,76053,76053,76053,76053,76053,76053
为什么会这样子呢?
请指教,谢谢!

解决方案 »

  1.   

    iSeed 定义的位置不对每次可不都是一样的。
    可以用时间做种子也可以把iSeed的定义放到外面去。。
      

  2.   


     public static int[] CreateRandom(int randomCount,int min,int max)
            {
                int[] randomArr = new int[randomCount];
                Random ran;
                int iSeed = 10; // 应该在这里定议呀。
                for (int i = 0; i < randomCount; i++)
                {                
                    ran = new Random(iSeed++);
                    randomArr[i] = ran.Next(min, max);
                }
                return randomArr;
            }
    按上面的思路来。
      

  3.   


    晕!太大意了,这样子的确解决了。
    不过,为什么使用前面注释部分也不行呢?
    long tick = DateTime.Now.Ticks;
    ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
    randomArr[i] = ran.Next(min,max);
      

  4.   

    另外,如果使用默认构造函数的话,
    也就是:ran = new Random();
    产生的随机数也相同,
    它默认使用的种子就是当前时间吧,
    怎么会一样呢?
      

  5.   

    Random ran= new Random(DateTime.Now.Millisecond);
    Random r = new Random((int)(tick & 0xffffffffL) | (int) (tick >> 32));//保证生成随机数重复率很低
      

  6.   

    Random rnd = new Random(DateTime.Now.Millisecond);
    移到函数外成为类字段