C#获取不重复随机数

简单结束一下Random类

 

命名空间:System

表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。

伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因为它们是用一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已足够了。

伪随机数的生成是从种子值开始。如果反复使用同一个种子,就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关,从而对于 Random 的每个新实例,都会产生不同的系列。默认情况下,Random 类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。但是,因为时钟的分辨率有限,所以,如果使用无参数构造函数连续创建不同的 Random 对象,就会创建生成相同随机数序列的随机数生成器。

通过创建单个而不是多个 Random 对象可以避免此问题。

若要提高性能,请创建一个随时间推移能生成多个随机数的 Random 对象,而不要反复新建会生成同一个随机数的 Random 对象。

 

随机获取一个范围内的数

获取随机数:

//从1开始到20结束

Random r = new Random();
 int p = r.Next(1, 20);

 

在1到20之间获取10个不重复的随机数:

public void Main(string[] args)
        {

           //定义一个需要数组
            int[] index = new int[10];

            //循环获取
            for (int j = 0; j < 10; j++)
            {
                int p = Fan(20, index);

                //把获取到的随机数放如数组中方便判断是否有重复的是随机数
                index[j] = p;

                //输出随机数
                Console.WriteLine(p);
            }
            Console.Read();
        }

      //定义一个获取随机数的方法

        public int Fan(int id, int[] index)
        {

            Random r = new Random();

          //获取到随机数
            int p = r.Next(1, id);

          //判断是否获取到相同的随机数
            for (int q = 0; q < index.Length; q++)
            {
                if (p == index[q])
                {

                    //如果获取的数重复重新获取
                    return Fan(id, index);
                }
            }

            return p;
        }

你可能感兴趣的:(C#获取不重复随机数)