Dotnet.Frameword中提供了一个专门产生随机数的类System.Random,计算机并不能产生完全随机的数字,它生成的数字被称为伪随机数,它是以相同的概率从一组有限的数字中选取的,所选的数字并不具有完全的随机性,但就实用而言,其随机程度已经足够了。
在使用随机数时,要先初始化一个随机数发生器.有两种方法;
第一种方法不指定随机种子,系统自动选取当前时前作随机种子:
Random ra = new Random();
第二种方法是指定一个int型的参数作为随机种子:
Random ra = new Random( int iseed);
初始化完成后,用Random.Next()方法产生随机数。
ra.Next(); 它返回一个大于或等于零而小于2, 147 , 483 ,647的数.
下面我们介绍它的重载函数和其它一些方法。
public virtual int Next( int );
用法:ra.next( 20 )
返回一个小于所指定最大值(此处为20)的正随机数。
public virtual int Next( int minValue, int maxValue);
用法:ra.next( 1 , 20 )
返回一个指定范围内(此处为1 - 20之间)的随机数.
类System.Random还有几个方法分别是:
公共方法:
NextBytes用随机数填充指定字节数组的元素。
NextDouble返回一个介于 0.0 和 1.0 之间的随机数。
受保护的方法:
Sample返回一个介于 0.0 和 1.0 之间的随机数,只允许子类对象访问。
要在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数。
可以参考下面两个函数:
differSamenessRandomNum与getRandomNum:
public int [] differSamenessRandomNum( int num, int minValue, int maxValue)
// 在区间[minValue,maxValue]取出num个互不相同的随机数,返回数组。
{
Random ra = new Random( unchecked (( int )DateTime.Now.Ticks)); // 保证产生的数字的随机性
int [] arrNum = new int [num];
int tmp = 0 ;
for ( int i = 0 ;i <= num - 1 ;i ++ )
{
tmp = ra.Next(minValue,maxValue); // 随机取数
arrNum[i] = get RandomNum(arrNum,tmp,minValue,maxValue,ra); // 取出值赋到数组中
}
return arrNum;
}
函数getNum是一递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。
public int getRandomNum( int [] arrNum, int tmp, int minValue, int maxValue,Random ra)
{
int n = 0 ;
while (n <= arrNum.Length - 1 )
{
if (arrNum[n] == tmp) // 利用循环判断是否有重复
{
tmp = ra.Next(minValue,maxValue); // 重新随机获取。
getRandomNum(arrNum,tmp,minValue,maxValue,ra);
// 递归:如果取出来的数字和已取得的数字有重复就重新随机获取。
}
n ++ ;
}
return tmp;
}
在使用随机数时,要先初始化一个随机数发生器.有两种方法;
第一种方法不指定随机种子,系统自动选取当前时前作随机种子:
Random ra = new Random();
第二种方法是指定一个int型的参数作为随机种子:
Random ra = new Random( int iseed);
初始化完成后,用Random.Next()方法产生随机数。
ra.Next(); 它返回一个大于或等于零而小于2, 147 , 483 ,647的数.
下面我们介绍它的重载函数和其它一些方法。
public virtual int Next( int );
用法:ra.next( 20 )
返回一个小于所指定最大值(此处为20)的正随机数。
public virtual int Next( int minValue, int maxValue);
用法:ra.next( 1 , 20 )
返回一个指定范围内(此处为1 - 20之间)的随机数.
类System.Random还有几个方法分别是:
公共方法:
NextBytes用随机数填充指定字节数组的元素。
NextDouble返回一个介于 0.0 和 1.0 之间的随机数。
受保护的方法:
Sample返回一个介于 0.0 和 1.0 之间的随机数,只允许子类对象访问。
要在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数。
可以参考下面两个函数:
differSamenessRandomNum与getRandomNum:
public int [] differSamenessRandomNum( int num, int minValue, int maxValue)
// 在区间[minValue,maxValue]取出num个互不相同的随机数,返回数组。
{
Random ra = new Random( unchecked (( int )DateTime.Now.Ticks)); // 保证产生的数字的随机性
int [] arrNum = new int [num];
int tmp = 0 ;
for ( int i = 0 ;i <= num - 1 ;i ++ )
{
tmp = ra.Next(minValue,maxValue); // 随机取数
arrNum[i] = get RandomNum(arrNum,tmp,minValue,maxValue,ra); // 取出值赋到数组中
}
return arrNum;
}
函数getNum是一递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。
public int getRandomNum( int [] arrNum, int tmp, int minValue, int maxValue,Random ra)
{
int n = 0 ;
while (n <= arrNum.Length - 1 )
{
if (arrNum[n] == tmp) // 利用循环判断是否有重复
{
tmp = ra.Next(minValue,maxValue); // 重新随机获取。
getRandomNum(arrNum,tmp,minValue,maxValue,ra);
// 递归:如果取出来的数字和已取得的数字有重复就重新随机获取。
}
n ++ ;
}
return tmp;
}