在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
private static char[] constant =
{ '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' }; public static string GenerateRandomNumber(int Length) { System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62); Random rd = new Random(); for (int i = 0; i < Length; i++) { newRandom.Append(constant[rd.Next(62)]); } return newRandom.ToString(); } 随机数的使用很普遍,可用它随机显示图片,用它防止无聊的人在论坛灌水还可以用来加密信息等等。本文讨论如何在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数,并通过此文介绍Visual c#中随机数的用法。 我们可以用以下两种方法初始化一个随机数发生器; 函数是这样用,比如100至999的随机数 Random ran=new Random();
int RandKey=ran.Next(100,999);
第一种方法不指定随机种子,系统自动选取当前时前作随机种子: Random ra=new Random();
int iSeed=6;
Random ra=new Random(iSeed); 下面我们要用到Random.Next()方法产生随机数。 ra.Next();
public virtual int Next(int);
用法:ra.next(20) public virtual int Next(int minValue, int maxValue);
用法:ra.next(1,20) 类System.Random还有几个方法分别是: 受保护的方法: 以上介绍了随机数的基本用法,下面我们用一个实例来做更进一步的介绍。要在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数。 主要是下面两个函数getRandomNum与getNum: public int[] getRandomNum(int num,int minValue,int maxValue)
{ 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]=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值赋到数组中 } return arrNum; } getRandomNum即是在区间[minValue,maxValue]取出num个互不相同的随机数,返回的数组包含着结果。 其中随机数是这样创建的 Random ra=new Random(unchecked((int)DateTime.Now.Ticks));为什么不用Random ra=new Random();(系统自动选取当前时前作随机种子)呢? 用系统时间做随机种子并不保险,如果应用程序在一个较快的计算机上运行,则该计算机的系统时钟可能没有时间在此构造函数的调用之间进行更改,Random 的不同实例的种子值可能相同。这种情况下,我们就需要另外的算法来保证产生的数字的随机性。所以为了保证产生的随机数足够"随机",我们不得不使用复杂一点的方法来获得随机种子。在上面的这段程序中,我们首先使用系统时间作为随机种子,然后将上一次产生的随机数跟循环变量和一个与系统时间有关的整型参数相乘,以之作为随机种子,从而得到了每次都不同的随机种子,保证了产生足够"随机"的随机数。 函数getNum是一递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。值得注意的是要用一同一个随机数实例生成,所以ra要作为参数传入getNum中,否则生成的数字会有重复。 public int getNum(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); //重新随机获取。 getNum(arrNum,tmp,minValue,maxValue,ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。 } n ; } return tmp; } 最后就是要显示出来,当点击一个button时取出的数字显示在一个label中。 private void button1_Click(object sender, System.EventArgs e)
{ int[] arr=getRandomNum(6,1,20); //从1至20中取出6个互不相同的随机数 int i=0; string temp=""; while (i<=arr.Length-1){ temp =arr[i].ToString() " "; i ; } label1.Text=temp; //显示在label1中 } 原文:http://www.cnblogs.com/jxsoft/archive/2011/03/15/1984509.html
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论