C#生成互不相同隨機(jī)數(shù)的實(shí)現(xiàn)方法
本文實(shí)例講述了C#生成互不相同隨機(jī)數(shù)的實(shí)現(xiàn)方法,在進(jìn)行C#應(yīng)用程序設(shè)計(jì)時(shí)非常具有實(shí)用價(jià)值。本文詳細(xì)講述了其功能的實(shí)現(xiàn)過程。分享給大家供大家參考之用。具體方法如下:
一般來說,用C#生成足夠隨機(jī)的互不相同的隨機(jī)數(shù) Dotnet.Frameword中提供了一個(gè)專門產(chǎn)生隨機(jī)數(shù)的類System.Random,計(jì)算機(jī)并不能產(chǎn)生完全隨機(jī)的數(shù)字,它生成的數(shù)字被稱為偽隨機(jī)數(shù),它是以相同的概率從一組有限的數(shù)字中選取的,所選的數(shù)字并不具有完全的隨機(jī)性,但就實(shí)用而言,其隨機(jī)程度已經(jīng)足夠了。
在使用隨機(jī)數(shù)時(shí),要先初始化一個(gè)隨機(jī)數(shù)發(fā)生器.有兩種方法;
第一種方法不指定隨機(jī)種子,系統(tǒng)自動(dòng)選取當(dāng)前時(shí)前作隨機(jī)種子:
Random ra=new Random();
第二種方法是指定一個(gè)int型的參數(shù)作為隨機(jī)種子:
Random ra=new Random(int iseed);
初始化完成后,用Random.Next()方法產(chǎn)生隨機(jī)數(shù)。
ra.Next(); 它返回一個(gè)大于或等于零而小于2,147,483,647的數(shù).
下面我們介紹它的重載函數(shù)和其它一些方法。
public virtual int Next(int);
用法:ra.next(20) 返回一個(gè)小于所指定最大值(此處為20)的正隨機(jī)數(shù)。
public virtual int Next(int minValue, int maxValue);
用法:ra.next(1,20) 返回一個(gè)指定范圍內(nèi)(此處為1-20之間)的隨機(jī)數(shù).
類System.Random還有幾個(gè)方法分別是:
公共方法: NextBytes用隨機(jī)數(shù)填充指定字節(jié)數(shù)組的元素。
NextDouble返回一個(gè)介于 0.0 和 1.0 之間的隨機(jī)數(shù)。
受保護(hù)的方法: Sample返回一個(gè)介于 0.0 和 1.0 之間的隨機(jī)數(shù),只允許子類對(duì)象訪問。
要在一段數(shù)字區(qū)間內(nèi)隨機(jī)生成若干個(gè)互不相同的隨機(jī)數(shù),比如在從1到20間隨機(jī)生成6個(gè)互不相同的整數(shù)。
可以參考下面兩個(gè)函數(shù): differSamenessRandomNum與getRandomNum:
public int[] differSamenessRandomNum(int num,int minValue,int maxValue) //在區(qū)間[minValue,maxValue]取出num個(gè)互不相同的隨機(jī)數(shù),返回?cái)?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; }
相信本文所述對(duì)大家的C#程序設(shè)計(jì)有一定的借鑒價(jià)值。
- c# Random快速連續(xù)產(chǎn)生相同隨機(jī)數(shù)的解決方案
- C#生成指定范圍內(nèi)的不重復(fù)隨機(jī)數(shù)
- C#中獲取、生成隨機(jī)數(shù)的三種方法
- 用C#生成不重復(fù)的隨機(jī)數(shù)的代碼
- C#實(shí)現(xiàn)在兩個(gè)數(shù)字之間生成隨機(jī)數(shù)的方法
- C#短時(shí)間內(nèi)產(chǎn)生大量不重復(fù)的隨機(jī)數(shù)
- c#獲取相同概率隨機(jī)數(shù)的算法代碼
- C# 生成隨機(jī)數(shù)的代碼
- C#利用Random得隨機(jī)數(shù)求均值、方差、正態(tài)分布的方法
- C#實(shí)現(xiàn)的簡單隨機(jī)數(shù)產(chǎn)生器功能示例
相關(guān)文章
C#實(shí)現(xiàn)調(diào)用迅雷下載的方法
這篇文章主要介紹了C#實(shí)現(xiàn)調(diào)用迅雷下載的方法,非常實(shí)用的一個(gè)技巧,對(duì)于進(jìn)行C#程序設(shè)計(jì)有很好的借鑒價(jià)值,需要的朋友可以參考下2014-08-08CPF?使用C#的Native?AOT?發(fā)布程序的詳細(xì)過程
這篇文章主要介紹了CPF?使用C#的Native?AOT?發(fā)布程序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具體一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03基于WPF實(shí)現(xiàn)帶明細(xì)的環(huán)形圖表
這篇文章主要介紹了如何利用WPF繪制帶明細(xì)的環(huán)形圖表?,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下2022-08-08C#實(shí)現(xiàn)批量Word轉(zhuǎn)換Html的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C#批量Word轉(zhuǎn)換Html的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12