摘要
C#中的Random類是一種用于生成偽隨機數(shù)的類,它可以產(chǎn)生滿足某些隨機性統(tǒng)計要求的數(shù)字序列余佃。隨機性是計算機程序中常用的概念之一扇单,因為它可以模擬自然界中的隨機事件。在程序中使用隨機性可以幫助我們模擬復雜的系統(tǒng)誉碴,比如模擬人類行為、天氣預報等等瓣距。
在使用Random類生成偽隨機數(shù)時翔烁,我們需要注意以下幾點:
- Random類的隨機數(shù)是偽隨機數(shù),也就是說旨涝,它們并不是真正的隨機數(shù)。雖然它們滿足隨機性的統(tǒng)計要求侣背,但它們的生成過程是可預測的白华。
- Random類生成的隨機數(shù)是均勻分布的,也就是說贩耐,它們在給定的范圍內(nèi)具有相等的概率分布弧腥。
- Random類生成的隨機數(shù)是基于計算機內(nèi)部的硬件實現(xiàn)的,所以在計算機的不同部件上生成的隨機數(shù)可能不同潮太。
- Random類生成的隨機數(shù)是基于時間戳的管搪,也就是說,每次生成隨機數(shù)時铡买,都會基于當前的時間戳來生成更鲁。
在使用Random類生成偽隨機數(shù)時,我們需要根據(jù)實際需要選擇合適的隨機數(shù)生成方法奇钞,并且需要注意隨機數(shù)的均勻分布和隨機數(shù)的基礎(chǔ)值等問題澡为。
正文
構(gòu)造函數(shù)
Random() | 使用默認種子值初始化 Random 類的新實例。 |
Random(Int32) | 使用指定的種子值初始化 Random 類的新實例景埃。 |
方法
Equals(Object) | 確定指定對象是否等于當前對象媒至。 (繼承自 Object) |
GetHashCode() | 作為默認哈希函數(shù)顶别。 (繼承自 Object) |
GetType() | 獲取當前實例的 Type。 (繼承自 Object) |
MemberwiseClone() | 創(chuàng)建當前 Object 的淺表副本拒啰。 (繼承自 Object) |
Next() | 返回一個非負隨機整數(shù)驯绎。 |
Next(Int32) | 返回一個小于所指定最大值的非負隨機整數(shù)。 |
Next(Int32, Int32) | 返回在指定范圍內(nèi)的任意整數(shù)谋旦。 |
NextBytes(Byte[]) | 用隨機數(shù)填充指定字節(jié)數(shù)組的元素剩失。 |
NextBytes(Span<Byte>) | 用隨機數(shù)填充指定字節(jié)范圍的元素。 |
NextDouble() | 返回一個大于或等于 0.0 且小于 1.0 的隨機浮點數(shù)蛤织。 |
NextInt64() | 返回一個非負隨機整數(shù)赴叹。 |
NextInt64(Int64) | 返回一個小于所指定最大值的非負隨機整數(shù)。 |
NextInt64(Int64, Int64) | 返回在指定范圍內(nèi)的任意整數(shù)指蚜。 |
NextSingle() | 返回一個大于或等于 0.0 且小于 1.0 的隨機浮點數(shù)乞巧。 |
Sample() | 返回一個介于 0.0 和 1.0 之間的隨機浮點數(shù)。 |
ToString() | 返回表示當前對象的字符串摊鸡。 (繼承自 Object) |
NextBytes绽媒,生成Byte
static void Main(string[] args)
{
var rand = new Random();
var bytes = new byte[10];
rand.NextBytes(bytes);
Console.WriteLine("生成10個隨機數(shù):");
foreach (byte byteValue in bytes)
{
Console.Write("{0, 5}", byteValue);
}
Console.WriteLine();
}
產(chǎn)生從10個10到99的數(shù)據(jù)
static void Main(string[] args)
{
var rand = new Random();
//產(chǎn)生從10個10到99的數(shù)據(jù)
for (int ctr = 0; ctr < 10; ctr++)
Console.Write("{0,8:N0}", rand.Next(10, 99));
Console.WriteLine();
}
產(chǎn)生從小于1的double隨機數(shù)
static void Main(string[] args)
{
//產(chǎn)生從小于1的double隨機數(shù)
Random rnd = new Random();
for (int ctr = 0; ctr < 10; ctr++)
{
Console.Write("{0,10} ", rnd.NextDouble());
}
}
生成隨機的64位整數(shù)
static void Main(string[] args)
{
//用double*最大64位整數(shù)
Random rnd = new Random();
for (int ctr = 0; ctr < 10; ctr++)
{
Console.Write("{0,10} ", rnd.NextDouble() * Int64.MaxValue);
}
}
生成不重復隨機數(shù)
static void Main(string[] args)
{
Hashtable hashtable = new Hashtable();
Random rnd = new Random();
//生成20個隨機數(shù)
while (hashtable.Count!=20)
{
int v = rnd.Next(200);
if (!hashtable.Contains(v))
{
hashtable.Add(v, v);
}
}
foreach (DictionaryEntry item in hashtable)
{
Console.WriteLine(item.Value);
}
}
注意:為了提高性能并避免無意中創(chuàng)建生成相同數(shù)字序列的單獨隨機數(shù)生成器,建議創(chuàng)建一個對象來生成一段時間的許多隨機數(shù)免猾,而不是創(chuàng)建新的對象來生成一個隨機數(shù)是辕。