自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談C#隨機(jī)數(shù)發(fā)生器

開發(fā) 后端
本文介紹所謂的C#隨機(jī)數(shù)發(fā)生器都是通過一定的算法對(duì)事先選定的隨機(jī)種子做復(fù)雜的運(yùn)算,用產(chǎn)生的結(jié)果來近似的模擬完全隨機(jī)數(shù),這種隨機(jī)數(shù)被稱 作偽隨機(jī)數(shù)。

我們?cè)谧瞿茏詣?dòng)生成試卷的考試系統(tǒng)時(shí),常常需要隨機(jī)生成一組不重復(fù)的題目,在.net Framework中提供了一個(gè)專門用來產(chǎn)生隨機(jī)數(shù)的類System.Random。

對(duì)于隨機(jī)數(shù),大家都知道,計(jì)算機(jī)不 可能產(chǎn)生完全隨機(jī)的數(shù)字,所謂的C#隨機(jī)數(shù)發(fā)生器都是通過一定的算法對(duì)事先選定的隨機(jī)種子做復(fù)雜的運(yùn)算,用產(chǎn)生的結(jié)果來近似的模擬完全隨機(jī)數(shù),這種隨機(jī)數(shù)被稱 作偽隨機(jī)數(shù)。偽隨機(jī)數(shù)是以相同的概率從一組有限的數(shù)字中選取的。所選數(shù)字并不具有完全的隨機(jī)性,但是從實(shí)用的角度而言,其隨機(jī)程度已足夠了。偽隨機(jī)數(shù)的選 擇是從隨機(jī)種子開始的,所以為了保證每次得到的偽隨機(jī)數(shù)都足夠地“隨機(jī)”,隨機(jī)種子的選擇就顯得非常重要。如果隨機(jī)種子一樣,那么同一個(gè)C#隨機(jī)數(shù)發(fā)生器產(chǎn)生 的隨機(jī)數(shù)也會(huì)一樣。一般地,我們使用同系統(tǒng)時(shí)間有關(guān)的參數(shù)作為隨機(jī)種子,這也是.net Framework中的C#隨機(jī)數(shù)發(fā)生器默認(rèn)采用的方法。

我們可以使用兩種方式初始化一個(gè)C#隨機(jī)數(shù)發(fā)生器:

***種方法不指定隨機(jī)種子,系統(tǒng)自動(dòng)選取當(dāng)前時(shí)間作為隨機(jī)種子:

  1. Random ro = new Random(); 

第二種方法可以指定一個(gè)int型參數(shù)作為隨機(jī)種子:

  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)); 

用它來檢測(cè)生成的隨機(jī)數(shù)是否有重復(fù),如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。

  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); //隨機(jī)取數(shù)  
  9. arrNum=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值賦到數(shù)組中  
  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) //利用循環(huán)判斷是否有重復(fù)  
  19. {  
  20. tmp=ra.Next(minValue,maxValue); //重新隨機(jī)獲取。  
  21. getNum(arrNum,tmp,minValue,maxValue,ra);//遞歸:如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。  
  22. }  
  23. n++;  
  24. }  
  25. return tmp;  

【編輯推薦】

  1. 定義C#接口學(xué)習(xí)經(jīng)驗(yàn)
  2. C# ListBox學(xué)習(xí)筆記
  3. 操作C# Dataset介紹
  4. C# ODBC訪問MySQL數(shù)據(jù)庫
  5. 淺析C#和Java不同點(diǎn)
責(zé)任編輯:佚名 來源: BlogJava
相關(guān)推薦

2021-07-04 10:45:44

量子科技量子計(jì)算量子通信

2012-03-22 09:31:14

Java

2024-01-25 11:32:21

2014-05-13 10:21:00

2010-02-01 17:02:53

C++產(chǎn)生隨機(jī)數(shù)

2019-09-11 10:09:00

Java虛擬機(jī)算法

2009-12-08 13:07:57

PHP函數(shù)mt_sra

2024-11-01 15:51:06

2009-08-20 18:30:33

C# ReaderWr

2011-09-21 10:56:31

C#結(jié)構(gòu)

2009-07-06 15:11:18

Java 隨機(jī)數(shù)

2009-06-11 15:16:18

不重復(fù)隨機(jī)數(shù)Java

2009-12-08 11:44:14

PHP獲取隨機(jī)數(shù)

2010-09-06 17:40:59

SQL函數(shù)

2021-12-27 09:31:20

HashtableJava隨機(jī)數(shù)

2009-12-08 12:58:33

PHP隨機(jī)數(shù)類

2010-07-15 13:34:32

Perl隨機(jī)數(shù)

2009-12-02 17:01:01

PHP隨機(jī)數(shù)rand()

2015-10-13 10:00:58

Swift隨機(jī)數(shù)使用總結(jié)

2009-08-07 11:26:53

C#數(shù)組結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)