摘要
C#中的Random类是一种用于生成伪随机数的类,它可以产生满足某些随机性统计要求的数字序列。随机性是计算机程序中常用的概念之一,因为它可以模拟自然界中的随机事件。在程序中使用随机性可以帮助我们模拟复杂的系统,比如模拟人类行为、天气预报等等。
在使用Random类生成伪随机数时,我们需要注意以下几点:
- Random类的随机数是伪随机数,也就是说,它们并不是真正的随机数。虽然它们满足随机性的统计要求,但它们的生成过程是可预测的。
- Random类生成的随机数是均匀分布的,也就是说,它们在给定的范围内具有相等的概率分布。
- Random类生成的随机数是基于计算机内部的硬件实现的,所以在计算机的不同部件上生成的随机数可能不同。
- Random类生成的随机数是基于时间戳的,也就是说,每次生成随机数时,都会基于当前的时间戳来生成。
在使用Random类生成伪随机数时,我们需要根据实际需要选择合适的随机数生成方法,并且需要注意随机数的均匀分布和随机数的基础值等问题。
正文
构造函数
Random() | 使用默认种子值初始化 Random 类的新实例。 |
Random(Int32) | 使用指定的种子值初始化 Random 类的新实例。 |
方法
Equals(Object) | 确定指定对象是否等于当前对象。 (继承自 Object) |
GetHashCode() | 作为默认哈希函数。 (继承自 Object) |
GetType() | 获取当前实例的 Type。 (继承自 Object) |
MemberwiseClone() | 创建当前 Object 的浅表副本。 (继承自 Object) |
Next() | 返回一个非负随机整数。 |
Next(Int32) | 返回一个小于所指定最大值的非负随机整数。 |
Next(Int32, Int32) | 返回在指定范围内的任意整数。 |
NextBytes(Byte[]) | 用随机数填充指定字节数组的元素。 |
NextBytes(Span<Byte>) | 用随机数填充指定字节范围的元素。 |
NextDouble() | 返回一个大于或等于 0.0 且小于 1.0 的随机浮点数。 |
NextInt64() | 返回一个非负随机整数。 |
NextInt64(Int64) | 返回一个小于所指定最大值的非负随机整数。 |
NextInt64(Int64, Int64) | 返回在指定范围内的任意整数。 |
NextSingle() | 返回一个大于或等于 0.0 且小于 1.0 的随机浮点数。 |
Sample() | 返回一个介于 0.0 和 1.0 之间的随机浮点数。 |
ToString() | 返回表示当前对象的字符串。 (继承自 Object) |
NextBytes,生成Byte
static void Main(string[] args)
{
var rand = new Random();
var bytes = new byte[10];
rand.NextBytes(bytes);
Console.WriteLine("生成10个随机数:");
foreach (byte byteValue in bytes)
{
Console.Write("{0, 5}", byteValue);
}
Console.WriteLine();
}
产生从10个10到99的数据
static void Main(string[] args)
{
var rand = new Random();
//产生从10个10到99的数据
for (int ctr = 0; ctr < 10; ctr++)
Console.Write("{0,8:N0}", rand.Next(10, 99));
Console.WriteLine();
}
产生从小于1的double随机数
static void Main(string[] args)
{
//产生从小于1的double随机数
Random rnd = new Random();
for (int ctr = 0; ctr < 10; ctr++)
{
Console.Write("{0,10} ", rnd.NextDouble());
}
}
生成随机的64位整数
static void Main(string[] args)
{
//用double*最大64位整数
Random rnd = new Random();
for (int ctr = 0; ctr < 10; ctr++)
{
Console.Write("{0,10} ", rnd.NextDouble() * Int64.MaxValue);
}
}
生成不重复随机数
static void Main(string[] args)
{
Hashtable hashtable = new Hashtable();
Random rnd = new Random();
//生成20个随机数
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);
}
}
注意:为了提高性能并避免无意中创建生成相同数字序列的单独随机数生成器,建议创建一个对象来生成一段时间的许多随机数,而不是创建新的对象来生成一个随机数。
网友评论