C#常用类 [2] Random

转载至:点击这里

1 Random类简介

        Random 类 命名空间:System 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因为它们是用一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已足够了。

2 Random成员

序号 成员名 描述
1 Equals 确定指定的 Object 是否等于当前的 Object。(继承自 Object。)
2 Finalize 允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。(继承自 Object。)
3 GetHashCode 用作特定类型的哈希函数。(继承自 Object。)
4 GetType 获取当前实例的 Type。(继承自 Object。)
5 MemberwiseClone 创建当前 Object 的浅表副本。(继承自 Object。)
6 Next 已重载。 返回随机数。
7 NextBytes 用随机数填充指定字节数组的元素。
8 NextDouble 返回一个介于 0.0 和 1.0 之间的随机数。
9 Sample 返回一个介于 0.0 和 1.0 之间的随机数。
9 ToString 返回表示当前 Object 的 String。(继承自 Object。)

3 Random生成随机数示实例

  3.1生成可重复的随机数

    生成小于100的非随机数

static void Main(string[] args)
{
	Random rand = new Random();
	for (int i = 0; i < 100; i++)
	{
     	Console.WriteLine(rand.Next(100));
	}
}

在这里插入图片描述

    生成某区间的随机数

static void Main(string[] args)
{
	Random rand = new Random();
	for (int i = 0; i < 100; i++)
	{
     	Console.WriteLine(rand.Next(5,10));
	}
}

在这里插入图片描述
    生成0.0-1.0间的随机数

static void Main(string[] args)
{
	Random rand = new Random();
	for (int i = 0; i < 100; i++)
	{
     	Console.WriteLine(rand.NextDouble());
	}
}

在这里插入图片描述

  3.2生成不重复的随机数

 下面使用两种方法生成不重复随机数,并计算耗时。
 ①使用Hashtable(using System.Collections;)

//生成不重复的
static void Main(string[] args)
 {
   //设置计时起始时间
	DateTime beforDT = System.DateTime.Now;
    Hashtable hashtable = new Hashtable();
    Random rm = new Random();
    int RmNum = 10000;
    for (int i = 0; hashtable.Count < RmNum; i++)
     {
          int nValue = rm.Next(20000);
          if (!hashtable.ContainsValue(nValue))
            {
                hashtable.Add(nValue, nValue);
                //Console.Write(nValue + "\t");
            }
      }
      DateTime afterDT = System.DateTime.Now;
      TimeSpan ts = afterDT.Subtract(beforDT);
      Console.WriteLine("DateTime总共花费{0}ms.", TotalMilliseconds);
}

在这里插入图片描述
 ②使用条件判断

//生成不重复的
static void Main(string[] args)
{
	DateTime beforDT = System.DateTime.Now;
    Random rand = new Random();
    int j = 1;
    int[] result = new int[10000];
    result[0] = rand.Next(20000);
    for (int i = 0; j < 10000; i++)
      {
          int temp = rand.Next(20000);
          for (int r = 0; r < j; r++)
             {
                if (result[r] == temp)
                {
                    break;
                }
                if (r == j - 1)
                {
                   result[j] = temp;
                   j++;
                }
             }
      }
      DateTime afterDT = System.DateTime.Now;
      TimeSpan ts = afterDT.Subtract(beforDT);
      Console.WriteLine("DateTime总共花费{0}ms.", ts.TotalMilliseconds);
}

在这里插入图片描述
从上面计算耗时来看,Hashtable用时比普通算法要多出3倍。

猜你喜欢

转载自blog.csdn.net/qq_29406323/article/details/86181262