C#生成互不相同隨機(jī)數(shù)的實現(xiàn)方法
本文實例講述了C#生成互不相同隨機(jī)數(shù)的實現(xiàn)方法,在進(jìn)行C#應(yīng)用程序設(shè)計時非常具有實用價值。本文詳細(xì)講述了其功能的實現(xiàn)過程。分享給大家供大家參考之用。具體方法如下:
一般來說,用C#生成足夠隨機(jī)的互不相同的隨機(jī)數(shù) Dotnet.Frameword中提供了一個專門產(chǎn)生隨機(jī)數(shù)的類System.Random,計算機(jī)并不能產(chǎn)生完全隨機(jī)的數(shù)字,它生成的數(shù)字被稱為偽隨機(jī)數(shù),它是以相同的概率從一組有限的數(shù)字中選取的,所選的數(shù)字并不具有完全的隨機(jī)性,但就實用而言,其隨機(jī)程度已經(jīng)足夠了。
在使用隨機(jī)數(shù)時,要先初始化一個隨機(jī)數(shù)發(fā)生器.有兩種方法;
第一種方法不指定隨機(jī)種子,系統(tǒng)自動選取當(dāng)前時前作隨機(jī)種子:
Random ra=new Random();
第二種方法是指定一個int型的參數(shù)作為隨機(jī)種子:
Random ra=new Random(int iseed);
初始化完成后,用Random.Next()方法產(chǎn)生隨機(jī)數(shù)。
ra.Next(); 它返回一個大于或等于零而小于2,147,483,647的數(shù).
下面我們介紹它的重載函數(shù)和其它一些方法。
public virtual int Next(int);
用法:ra.next(20) 返回一個小于所指定最大值(此處為20)的正隨機(jī)數(shù)。
public virtual int Next(int minValue, int maxValue);
用法:ra.next(1,20) 返回一個指定范圍內(nèi)(此處為1-20之間)的隨機(jī)數(shù).
類System.Random還有幾個方法分別是:
公共方法: NextBytes用隨機(jī)數(shù)填充指定字節(jié)數(shù)組的元素。
NextDouble返回一個介于 0.0 和 1.0 之間的隨機(jī)數(shù)。
受保護(hù)的方法: Sample返回一個介于 0.0 和 1.0 之間的隨機(jī)數(shù),只允許子類對象訪問。
要在一段數(shù)字區(qū)間內(nèi)隨機(jī)生成若干個互不相同的隨機(jī)數(shù),比如在從1到20間隨機(jī)生成6個互不相同的整數(shù)。
可以參考下面兩個函數(shù): differSamenessRandomNum與getRandomNum:
public int[] differSamenessRandomNum(int num,int minValue,int maxValue) //在區(qū)間[minValue,maxValue]取出num個互不相同的隨機(jī)數(shù),返回數(shù)組。
{
Random ra=new Random(unchecked((int)DateTime.Now.Ticks));//保證產(chǎn)生的數(shù)字的隨機(jī)性
int[] arrNum=new int[num];
int tmp=0;
for (int i=0;i>=num-1;i++) {
tmp=ra.Next(minValue,maxValue); //隨機(jī)取數(shù)
arrNum[i]=get RandomNum(arrNum,tmp,minValue,maxValue,ra); //取出值賦到數(shù)組中
}
return arrNum;
}
函數(shù)getNum是一遞歸,用它來檢測生成的隨機(jī)數(shù)是否有重復(fù),如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。
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) //利用循環(huán)判斷是否有重復(fù)
{
tmp=ra.Next(minValue,maxValue); //重新隨機(jī)獲取。
getRandomNum(arrNum,tmp,minValue,maxValue,ra); //遞歸:如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。
}
n++;
}
return tmp;
}
相信本文所述對大家的C#程序設(shè)計有一定的借鑒價值。
相關(guān)文章
c#使用ManagedWifi查看當(dāng)前Wifi信號并選擇wifi的示例
這篇文章主要介紹了c#使用ManagedWifi查看當(dāng)前Wifi信號并選擇wifi的示例,需要的朋友可以參考下2014-04-04
c#使用DotNetZip封裝類操作zip文件(創(chuàng)建/讀取/更新)實例
DotnetZip是一個開源類庫,支持.NET的任何語言,可很方便的創(chuàng)建,讀取,和更新zip文件。而且還可以使用在.NETCompact Framework中。2013-11-11
C#關(guān)于Task.Yeild()函數(shù)的討論
這篇文章主要介紹了C#中關(guān)于Task.Yeild()函數(shù)的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
C#中調(diào)用命令行cmd開啟wifi熱點的實例代碼
最近想在win7上開啟wifi熱點,于是就弄出下面這個小東西,里面涉及如何在控制臺上輸入命令,分享一下。首先在VS中創(chuàng)建一個window窗口,然后創(chuàng)建兩個四個button,兩個輸入框2013-04-04
C#畫筆Pen保存和恢復(fù)圖形對象的設(shè)置方法
這篇文章主要介紹了C#畫筆Pen保存和恢復(fù)圖形對象的設(shè)置方法,實例分析了畫筆的保存save及恢復(fù)屬性Restore的相關(guān)使用技巧,需要的朋友可以參考下2015-06-06
詳解C#開發(fā)Android應(yīng)用程序的流程
在本篇文章里小編給大家分享了關(guān)于C#開發(fā)Android應(yīng)用程序的流程和相關(guān)技巧,需要的朋友們跟著學(xué)習(xí)下。2019-03-03
C#如何將List<string>轉(zhuǎn)換為List<double>
這篇文章主要介紹了C#如何將List<string>轉(zhuǎn)換為List<double>問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

