Random rd = new Random(); // Random 如果不指定种子值,默认使用与时间相关的种子值,

由于运算速度较快,可能连续几次取随机数的时间无限接近,取得的随机数相同。

本例通过 Hashtable 排除重复值,即如果随机数已经取过,则重新取随机数,知道不重复。

当然也可以通过认为设置每次取随机数使用的种子值不同,避免取得相同随机数。

 

        /// <summary>
        /// 从1(含)开始到count(含) 取 count 个不重复的随机整数
        /// </summary>
        /// <param name="counts"></param>
        /// <returns></returns>
        public static int[] getRandom(int count)
        {
            Random rd = new Random();
            Hashtable ht = new Hashtable();

            int value = 0;
            int[] intArray = new int[count];

            for (int i = 0; i < count; i++)
            {
                value = rd.Next(1, count + 1);

                //已存在则重新取随机数
                while (ht.Contains(value))
                {
                    value = rd.Next(1, count + 1);//不包含counts+1
                }

                intArray[i] = value;
                ht.Add(value, value);
            }

            return intArray;
        }

posted on 2016-10-16 13:41  e路征途  阅读(211)  评论(0编辑  收藏  举报