1. 程式人生 > >C#常用類 [2] Random

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倍。