当前位置: 移动技术网 > IT编程>开发语言>c# > C#生成互不相同随机数的实现方法

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

2019年07月18日  | 移动技术网IT编程  | 我要评论
本文实例讲述了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#程序设计有一定的借鉴价值。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

  • 如何使用C# 捕获进程输出

    intro很多时候我们可能会需要执行一段命令获取一个输出,遇到的比较典型的就是之前我们需要用 ffmpeg 实现视频的编码压缩水印等一系列操作,当时使用的是 f... [阅读全文]
  • 全面分析c# LINQ

    大家好,这是 [c#.net 拾遗补漏] 系列的第 08 篇文章,今天讲 c# 强大的 linq 查询。linq 是我最喜欢的 c# 语言特性之一。linq 是... [阅读全文]
  • C# DataTable常见用法汇总

    c# datatable 的常见用法:(1)新建数据表。(2)向表添加列。(3)设置表特定行与列的数据值。(4)将某行数据加入到表。(5)合并表。(6)复制表。... [阅读全文]
  • C# 如何解析获取Url参数值

    今天遇到一个需求,需要处理通过接口传过来的一个参数,参数内容为一个拼接好的url地址,且该地址还会携带了一些额外的参数,包括但不限于数字,字符串,json串。样... [阅读全文]
  • C# 实现dataGridView选中一行右键出现菜单的示例代码

    在窗体中添加datagridview控件和contextmenustrip1控件,修改datagridview属性,将contextmenustrip控件绑定d... [阅读全文]
  • WPF实现手风琴式轮播图切换效果

    WPF实现手风琴式轮播图切换效果

    本文实例为大家分享了wpf实现轮播图切换效果的具体代码,供大家参考,具体内容如下实现效果如下:步骤:1、自定义控件myimagecontrol实现图片的裁切和动... [阅读全文]
  • WPF实现3D翻牌式倒计时特效

    WPF实现3D翻牌式倒计时特效

    本文实例为大家分享了wpf实现3d翻牌式倒计时的具体代码,供大家参考,具体内容如下实现效果如下:思路:使用自定义控件,设置一个背板 mycardcontrolb... [阅读全文]
  • WPF实现平面三角形3D运动效果

    WPF实现平面三角形3D运动效果

    本文实例为大家分享了wpf实现平面三角形3d运动效果的具体代码,供大家参考,具体内容如下实现效果如下:思路:封装三角形三个顶点和路径的三角形类,图形渲染时同步更... [阅读全文]
  • WPF实现3D粒子波浪效果

    WPF实现3D粒子波浪效果

    本文实例为大家分享了wpf实现3d粒子波浪效果的具体代码,供大家参考,具体内容如下实现效果如下:步骤:1、3d粒子类particle.cs2、粒子系统parti... [阅读全文]
  • 谈谈c#中的索引器

    概念索引器(indexer) 允许类中的对象可以像数组那样方便、直观的被引用。当为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array... [阅读全文]
验证码:
移动技术网