转载至:点击这里
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倍。