C#生成互不相同随机数的实现方法

 更新时间:2014年09月02日 09:35:31   投稿:shichen2014  
这篇文章主要介绍了C#生成互不相同随机数的实现方法,文中详细描述了C#生成互不相同随机数的各个步骤及所用到的函数,非常具有借鉴价值,需要的朋友可以参考下

本文实例讲述了C#生成互不相同随机数的实现方法,在进行C#应用程序设计时非常具有实用价值。本文详细讲述了其功能的实现过程。分享给大家供大家参考之用。具体方法如下:

一般来说,用C#生成足够随机的互不相同的随机数 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; 
}

相信本文所述对大家的C#程序设计有一定的借鉴价值。

相关文章

  • unity绘制一条流动的弧线(贝塞尔线)

    unity绘制一条流动的弧线(贝塞尔线)

    这篇文章主要为大家详细介绍了unity绘制一条流动弧线的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • C#与C++与互操作实例讲解

    C#与C++与互操作实例讲解

    在本篇文章里小编给大家整理了关于C#与C++与互操作实例以及相关内容,需要的朋友们可以学习下。
    2019-08-08
  • C#基于Socket实现多人聊天功能

    C#基于Socket实现多人聊天功能

    这篇文章主要为大家详细介绍了C#基于Socket实现多人聊天功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C#基于正则表达式抓取a标签链接和innerhtml的方法

    C#基于正则表达式抓取a标签链接和innerhtml的方法

    这篇文章主要介绍了C#基于正则表达式抓取a标签链接和innerhtml的方法,结合实例形式分析了C#使用正则表达式进行页面元素的匹配与抓取相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • C# 透明窗体制作实现方法比较分析

    C# 透明窗体制作实现方法比较分析

    制作透明窗体办法有好几种,各有优缺点.我们先来看看C#本身提供的办法:通过设置窗体的 TransparencyKey实现,需要的朋友可以了解下
    2012-12-12
  • c#基础——了解程序结构

    c#基础——了解程序结构

    这篇文章主要介绍了c# 程序结构的相关资料,文中讲解非常细致,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下
    2020-07-07
  • C#条码生成类分享

    C#条码生成类分享

    这篇文章主要分享了C#条码生成类的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 用C#缩小照片上传到各种空间的具体方法

    用C#缩小照片上传到各种空间的具体方法

    这篇文章介绍了用C#缩小照片的具体方法,有需要的朋友可以参考一下
    2013-09-09
  • C#中分部类和分部方法的应用

    C#中分部类和分部方法的应用

    本篇文章介绍了,C#中分部类和分部方法的应用。需要的朋友参考下
    2013-04-04
  • 深入解析C#中的async和await关键字

    深入解析C#中的async和await关键字

    C#语言中的async和await关键字使得编写异步代码变得更加简洁和易读,本文将深入解析C#中的async和await,帮助您更好地理解它们的工作原理和用法,,需要的朋友可以参考下
    2024-05-05

最新评论