c# 从一组数中随机抽取一定个数_C#生成指定数目的互不相同的随机数(转)

本文介绍了如何在C#中使用System.Random类生成指定数量的互不相同随机数。通过初始化随机数生成器并利用Next方法的不同重载,可以实现特定范围内的随机数生成。此外,还提供了differSamenessRandomNum和getRandomNum两个辅助函数,确保生成的随机数不重复。
摘要由CSDN通过智能技术生成

Dotnet.Frameword中提供了一个专门产生随机数的类System.Random,计算机并不能产生完全随机的数字,它生成的数字被称为伪随机数,它是以相同的概率从一组有限的数字中选取的,所选的数字并不具有完全的随机性,但就实用而言,其随机程度已经足够了。

在使用随机数时,要先初始化一个随机数发生器.有两种方法;

第一种方法不指定随机种子,系统自动选取当前时前作随机种子:

Random ra=newRandom();

第二种方法是指定一个int型的参数作为随机种子:

Random ra=newRandom(intiseed);

初始化完成后,用Random.Next()方法产生随机数。

ra.Next(); 它返回一个大于或等于零而小于2,147,483,647的数.

下面我们介绍它的重载函数和其它一些方法。publicvirtualintNext(int);

用法:ra.next(20)

返回一个小于所指定最大值(此处为20)的正随机数。publicvirtualintNext(intminValue,intmaxValue);

用法:ra.next(1,20)

返回一个指定范围内(此处为1-20之间)的随机数.

类System.Random还有几个方法分别是:

公共方法:

NextBytes用随机数填充指定字节数组的元素。

NextDouble返回一个介于0.0和1.0之间的随机数。

受保护的方法:

Sample返回一个介于0.0和1.0之间的随机数,只允许子类对象访问。

要在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数。

可以参考下面两个函数:

differSamenessRandomNum与getRandomNum:publicint[] differSamenessRandomNum(intnum,intminValue,intmaxValue)//在区间[minValue,maxValue]取出num个互不相同的随机数,返回数组。{

Random ra=newRandom(unchecked((int)DateTime.Now.Ticks));//保证产生的数字的随机性int[] arrNum=newint[num];inttmp=0;for(inti=0;i<=num-1;i++)

{

tmp=ra.Next(minValue,maxValue);//随机取数arrNum[i]=getRandomNum(arrNum,tmp,minValue,maxValue,ra);//取出值赋到数组中}returnarrNum;

}

函数getNum是一递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。publicintgetRandomNum(int[] arrNum,inttmp,intminValue,intmaxValue,Random ra)

{intn=0;while(n<=arrNum.Length-1)

{if(arrNum[n]==tmp)//利用循环判断是否有重复{

tmp=ra.Next(minValue,maxValue);//重新随机获取。getRandomNum(arrNum,tmp,minValue,maxValue,ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。}

n++;

}return

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值