浅谈C#随机数发生器

开发 后端
本文介绍所谓的C#随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称 作伪随机数。

我们在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复的题目,在.net Framework中提供了一个专门用来产生随机数的类System.Random。

对于随机数,大家都知道,计算机不 可能产生完全随机的数字,所谓的C#随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称 作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。伪随机数的选 择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要。如果随机种子一样,那么同一个C#随机数发生器产生 的随机数也会一样。一般地,我们使用同系统时间有关的参数作为随机种子,这也是.net Framework中的C#随机数发生器默认采用的方法。

我们可以使用两种方式初始化一个C#随机数发生器:

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

  1. Random ro = new Random(); 

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

  1. int iSeed=10;  
  2. Random ro = new Random(10);  
  3. long tick = DateTime.Now.Ticks;  
  4. Random ran = new Random((int)(tick & 0xffffffffL) | (int) (tick >> 32)); 

用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。

  1. Random ra=new Random(unchecked((int)DateTime.Now.Ticks));  
  2. int[] arrNum=new int[10];  
  3. int tmp=0;  
  4. int minValue=1;  
  5. int maxValue=10;  
  6. for (int i=0;i<10;i++)  
  7. {  
  8. tmp=ra.Next(minValue,maxValue); //随机取数  
  9. arrNum=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值赋到数组中  
  10. }  
  11. .........  
  12. .........  
  13. public int getNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra)  
  14. {  
  15. int n=0;  
  16. while (n<=arrNum.Length-1)  
  17. {  
  18. if (arrNum[n]==tmp) //利用循环判断是否有重复  
  19. {  
  20. tmp=ra.Next(minValue,maxValue); //重新随机获取。  
  21. getNum(arrNum,tmp,minValue,maxValue,ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。  
  22. }  
  23. n++;  
  24. }  
  25. return tmp;  

【编辑推荐】

  1. 定义C#接口学习经验
  2. C# ListBox学习笔记
  3. 操作C# Dataset介绍
  4. C# ODBC访问MySQL数据库
  5. 浅析C#和Java不同点
责任编辑:佚名 来源: BlogJava
相关推荐

2021-07-04 10:45:44

量子科技量子计算量子通信

2012-03-22 09:31:14

Java

2024-01-25 11:32:21

2014-05-13 10:21:00

2019-09-11 10:09:00

Java虚拟机算法

2010-02-01 17:02:53

C++产生随机数

2009-07-06 15:11:18

Java 随机数

2009-12-08 13:07:57

PHP函数mt_sra

2009-12-08 12:58:33

PHP随机数类

2010-07-15 13:34:32

Perl随机数

2015-10-13 10:00:58

Swift随机数使用总结

2009-12-02 17:01:01

PHP随机数rand()

2011-09-21 10:56:31

C#结构

2009-08-20 18:30:33

C# ReaderWr

2009-06-11 15:16:18

不重复随机数Java

2009-12-08 11:44:14

PHP获取随机数

2010-09-06 17:40:59

SQL函数

2021-12-27 09:31:20

HashtableJava随机数

2010-10-09 15:35:25

MySQL rand函

2016-05-31 10:29:09

点赞
收藏

51CTO技术栈公众号