C#常用類 [2] Random
阿新 • • 發佈:2019-01-11
轉載至:點選這裡
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倍。