C#Random隨機(jī)函數(shù)使用方法_第1頁
C#Random隨機(jī)函數(shù)使用方法_第2頁
C#Random隨機(jī)函數(shù)使用方法_第3頁
C#Random隨機(jī)函數(shù)使用方法_第4頁
C#Random隨機(jī)函數(shù)使用方法_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、C#Random隨機(jī)函數(shù)使用方法隨機(jī)數(shù)的使用很普遍,可用它隨機(jī)顯示圖片,用它防止無聊的人在論壇灌水還可以用來加密信息等等。本文討論如何在一段數(shù)字區(qū)間內(nèi)隨機(jī)生成若干個(gè)互不相同的隨機(jī)數(shù),比如在從1到20間隨機(jī)生成6個(gè)互不相同的整數(shù),并通過此文介紹Visualc#中隨機(jī)數(shù)的用法。.net.Frameword中提供了一個(gè)專門產(chǎn)生隨機(jī)數(shù)的類System.Random此類默認(rèn)情況下已被導(dǎo)入,編程過程中可以直接使用。我們知道,計(jì)算機(jī)并不能產(chǎn)生完全隨機(jī)的數(shù)字,它生成的數(shù)字被稱為偽隨機(jī)數(shù),它是以相同的概率從一組有限的數(shù)字中選取的,所選的數(shù)字并不具有完全的隨機(jī)性,但就實(shí)用而言,其隨機(jī)程度已經(jīng)足夠了。我們可以用以下

2、兩種方法初始化一個(gè)隨機(jī)數(shù)發(fā)生器;函數(shù)是這樣用,比如100至999的隨機(jī)數(shù)Randomran=newRandom();intRandKey=ran.Next(100,999);不過這樣會有重復(fù),可以給Random一個(gè)系統(tǒng)時(shí)間做為參數(shù),以此產(chǎn)生隨機(jī)數(shù),就不會重復(fù)了第一種方法不指定隨機(jī)種子,系統(tǒng)自動(dòng)選取當(dāng)前時(shí)前作隨機(jī)種子:Randomra=newRandom();第二種方法是指定一個(gè)int型的參數(shù)作為隨機(jī)種子:intiSeed=6;Randomra=newRandom(iSeed);下面我們要用到Random.Next()方法產(chǎn)生隨機(jī)數(shù)。ra.Next();它返回一個(gè)大于或等于零而小于2,147,4

3、83,647的數(shù),這并不滿足我們的需要,下面我們介紹它的重載函數(shù)和其它一些方法。publicvirtualintNext(int);用法:ra.next(20)返回一個(gè)小于所指定最大值(此處為20)的正隨機(jī)數(shù)。publicvirtualintNext(intminValue,intmaxValue);用法:ra.next(1,20)返回一個(gè)指定范圍內(nèi)(此處為1-20之間)的隨機(jī)數(shù),我們在下面的實(shí)例中會用到此函數(shù)。類System.Random還有幾個(gè)方法分別是:公共方法:NextBytes用隨機(jī)數(shù)填充指定字節(jié)數(shù)組的元素。NextDouble返回一個(gè)介于0.0和1.0之間的隨機(jī)數(shù)。受保護(hù)的方法:S

4、ample返回一個(gè)介于0.0和1.0之間的隨機(jī)數(shù),只允許子類對象訪問。以上介紹了隨機(jī)數(shù)的基本用法,下面我們用一個(gè)實(shí)例來做更進(jìn)一步的介紹。要在一段數(shù)字區(qū)間內(nèi)隨機(jī)生成若干個(gè)互不相同的隨機(jī)數(shù),比如在從1到20間隨機(jī)生成6個(gè)互不相同的整數(shù)。王要是下面兩個(gè)函數(shù)getRandomNumtgetNum:publicintgetRandomNum(intnum,intminValue,intmaxValue)Randomra=newRandom(unchecked(int)DateTime.Now.Ticks);intarrNum=newintnum;inttmp=0;for(inti=0;i<=num

5、-1;i+)取出值賦到數(shù)組中arrNumi=getNum(arrNum,tmp,minValue,maxValue,ra);/returnarrNum;getRandomNurB卩是在區(qū)間minValue,maxValue取出num個(gè)互不相同的隨機(jī)數(shù),返回的數(shù)組包含著結(jié)果。其中隨機(jī)數(shù)是這樣創(chuàng)建的Randomra=newRandom(unchecked(int)DateTime.Now.Ticks);為什么不用Randomra=newRandom();(系統(tǒng)自動(dòng)選取當(dāng)前時(shí)前作隨機(jī)種子)呢?用系統(tǒng)時(shí)間做隨機(jī)種子并不保險(xiǎn),如果應(yīng)用程序在一個(gè)較快的計(jì)算機(jī)上運(yùn)行,則該計(jì)算機(jī)的系統(tǒng)時(shí)鐘可能沒有時(shí)間在此構(gòu)造

6、函數(shù)的調(diào)用之間進(jìn)行更改,Random的不同實(shí)例的種子值可能相同。這種情況下,我們就需要另外的算法來保證產(chǎn)生的數(shù)字的隨機(jī)性。所以為了保證產(chǎn)生的隨機(jī)數(shù)足夠"隨機(jī)",我們不得不使用復(fù)雜一點(diǎn)的方法來獲得隨機(jī)種子。在上面的這段程序中,我們首先使用系統(tǒng)時(shí)間作為隨機(jī)種子,然后將上一次產(chǎn)生的隨機(jī)數(shù)跟循環(huán)變量和一個(gè)與系統(tǒng)時(shí)間有關(guān)的整型參數(shù)相乘,以之作為隨機(jī)種子,從而得到了每次都不同的隨機(jī)種子,保證了產(chǎn)生足夠"隨機(jī)"的隨機(jī)數(shù)。函數(shù)getNum是一遞歸,用它來檢測生成的隨機(jī)數(shù)是否有重復(fù),如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。值得注意的是要用一同一個(gè)隨機(jī)數(shù)實(shí)例生成

7、,所以ra要作為參數(shù)傳入getNum中,否則生成的數(shù)字會有重復(fù)。publicintgetNum(intarrNum,inttmp,intminValue,intmaxValue,Randomra)intn=0;while(n<=arrNumiength-1)if(arrNumn=tmp)/利用循環(huán)判斷是否有重復(fù)tmp=ra.Next(minValue,maxValue);/重新隨機(jī)獲取。getNum(arrNum,tmp,minValue,maxValue,ra);遞歸:如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。n+;returntmp;最后就是要顯示出來,當(dāng)點(diǎn)擊一個(gè)button時(shí)取出的數(shù)字顯示在一個(gè)label中。privatevoidbutton1_Click(objectsender,System.EventArgse)intarr=getRandomNum(6,1,20);/從1至20中取出6個(gè)互不相同的隨機(jī)數(shù)inti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論