-
C# .NET Random
生成随机数字和字母
1
:随机数生成器
类
Random
是
.NET
的伪随机数生成器,<
/p>
要生成各种类型的随机数,
必须先得到它的实例对
象,然后再生成随机数
2
:种子
随机数的生成是从种子值开始。
如果
反复使用同一个种子,就会生成相同的数字系列,产生不
同序列的一种方法是使种子值与
时间相关
3
:对象实例
默认情况下,
Random
类的无参数构造函数使用系统时钟生成其种子值
参数化构造函数可提供一个
Int32
类型的数字为起始值
4
:生成方案
方案
1
:
只实例化一个对象,多次方
法调用
?
Random rnd = new
Random();
int
i1 =
(10);
int
i2 = (10);
//
简单,方便,常用,生成的数字分布均匀,每个数字返回的可能性均相等。
//
一般是实例为静态对象,以减少实例化的次数,避
免产生相同的种子值,如
下:
?
private
static
RNGCryptoServiceProvider rand =
new
RNGCryptoServiceProvider();
方案
2
:
每次
方法调用都用一个新的实例(无参)
?
Random rnd1 =
new
Random();
int
i1 =
(10);
Random rnd2 =
new
Random();
int
i2 =
(10);
//
两个随机数十有八九相同
//
默认种子值是从系统时钟派生而来的,具有有限的分辨率。
//
因此,通过调用默认构造函数而频繁创建的不同对象将具
有相同的默认种子
值,因而会产生几组相同的随机数。
解决方案:
阻塞当前线程一小段时间
?
Random rnd1 =
new
Random();
(500);
Random
rnd2 = new
Random();
或者:应用一个算法来区分每个调用的种子值。
例如,
下面的代码使用右移位运算符为多个可以使用相同时间值初始化的
p>
Random
对象
(在
1
和大约
28
个对象之间)生成不同的种子值。
?
int
count = 4;
Random[] rnds = new
Random[count];
for
(int
i = 0; i <
count; i++)
{
rnds[i] = new
Random(unchecked((int)( >>
i)));
}
5
:通用数字和字母随机生成方案
数组方式:略
字符串方式:
不灵活,但比较简便,用于验证码已足够
?
string
str =
@
public
string
GetMix(Random rnd)
{
//
返回数字
// return
(10).ToString();
//
返回小写字母
// return
ing(10+(26),1);
-
-
-
-
-
-
-
-
-
上一篇:matlab产生随机数的方法
下一篇:C物品库存管理