欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c# 隨機(jī)函數(shù)的使用詳解

 更新時間:2013年06月09日 10:37:43   作者:  
本篇文章是對c#隨機(jī)函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
復(fù)制代碼 代碼如下:

private static char[] constant =  
      {  
        '0','1','2','3','4','5','6','7','8','9', 
        'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',  
        'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'  
      };
        public static string GenerateRandomNumber(int Length)
        {
            System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62);
            Random rd = new Random();
            for (int i = 0; i < Length; i++)
            {
                newRandom.Append(constant[rd.Next(62)]);
            }
            return newRandom.ToString();
        }

隨機(jī)數(shù)的使用很普遍,可用它隨機(jī)顯示圖片,用它防止無聊的人在論壇灌水還可以用來加密信息等等。本文討論如何在一段數(shù)字區(qū)間內(nèi)隨機(jī)生成若干個互不相同的隨機(jī)數(shù),比如在從1到20間隨機(jī)生成6個互不相同的整數(shù),并通過此文介紹Visual c#中隨機(jī)數(shù)的用法。

.net.Frameword中提供了一個專門產(chǎn)生隨機(jī)數(shù)的類System.Random,此類默認(rèn)情況下已被導(dǎo)入,編程過程中可以直接使用。我們知道,計算機(jī)并不能產(chǎn)生完全隨機(jī)的數(shù)字,它生成的數(shù)字被稱為偽隨機(jī)數(shù),它是以相同的概率從一組有限的數(shù)字中選取的,所選的數(shù)字并不具有完全的隨機(jī)性,但就實用而言,其隨機(jī)程度已經(jīng)足夠了。
我們可以用以下兩種方法初始化一個隨機(jī)數(shù)發(fā)生器;
函數(shù)是這樣用,比如100至999的隨機(jī)數(shù)
復(fù)制代碼 代碼如下:

Random ran=new Random();
int RandKey=ran.Next(100,999);

不過這樣會有重復(fù),可以給Random一個系統(tǒng)時間做為參數(shù),以此產(chǎn)生隨機(jī)數(shù),就不會重復(fù)了
第一種方法不指定隨機(jī)種子,系統(tǒng)自動選取當(dāng)前時前作隨機(jī)種子:
復(fù)制代碼 代碼如下:

Random ra=new Random();

第二種方法是指定一個int型的參數(shù)作為隨機(jī)種子:
復(fù)制代碼 代碼如下:

int iSeed=6;
Random ra=new Random(iSeed);

下面我們要用到Random.Next()方法產(chǎn)生隨機(jī)數(shù)。
復(fù)制代碼 代碼如下:

ra.Next();

它返回一個大于或等于零而小于2,147,483,647的數(shù),這并不滿足我們的需要,下面我們介紹它的重載函數(shù)和其它一些方法。
復(fù)制代碼 代碼如下:

publicvirtualint Next(int);用法:ra.next(20)

返回一個小于所指定最大值(此處為20)的正隨機(jī)數(shù)。
復(fù)制代碼 代碼如下:

publicvirtualint Next(int minValue, int maxValue);

用法:ra.next(1,20)
返回一個指定范圍內(nèi)(此處為1-20之間)的隨機(jī)數(shù),我們在下面的實例中會用到此函數(shù)。
類System.Random還有幾個方法分別是:
公共方法:
NextBytes用隨機(jī)數(shù)填充指定字節(jié)數(shù)組的元素。
NextDouble返回一個介于 0.0 和 1.0 之間的隨機(jī)數(shù)。
受保護(hù)的方法:
Sample返回一個介于 0.0 和 1.0 之間的隨機(jī)數(shù),只允許子類對象訪問。
以上介紹了隨機(jī)數(shù)的基本用法,下面我們用一個實例來做更進(jìn)一步的介紹。要在一段數(shù)字區(qū)間內(nèi)隨機(jī)生成若干個互不相同的隨機(jī)數(shù),比如在從1到20間隨機(jī)生成6個互不相同的整數(shù)。
主要是下面兩個函數(shù)getRandomNum與getNum:
復(fù)制代碼 代碼如下:

publicint[] getRandomNum(int num,int minValue,int maxValue)
{
Random ra=new Random(unchecked((int)DateTime.Now.Ticks));
int[] arrNum=newint[num];
int tmp=0;
for (int i=0;i<=num-1;i ){
tmp=ra.Next(minValue,maxValue); //隨機(jī)取數(shù)
arrNum[i]=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值賦到數(shù)組中
}
return arrNum;
}

getRandomNum即是在區(qū)間[minValue,maxValue]取出num個互不相同的隨機(jī)數(shù),返回的數(shù)組包含著結(jié)果。
其中隨機(jī)數(shù)是這樣創(chuàng)建的 Random ra=new Random(unchecked((int)DateTime.Now.Ticks));為什么不用Random ra=new Random();(系統(tǒng)自動選取當(dāng)前時前作隨機(jī)種子)呢?

用系統(tǒng)時間做隨機(jī)種子并不保險,如果應(yīng)用程序在一個較快的計算機(jī)上運(yùn)行,則該計算機(jī)的系統(tǒng)時鐘可能沒有時間在此構(gòu)造函數(shù)的調(diào)用之間進(jìn)行更改,Random 的不同實例的種子值可能相同。這種情況下,我們就需要另外的算法來保證產(chǎn)生的數(shù)字的隨機(jī)性。所以為了保證產(chǎn)生的隨機(jī)數(shù)足夠"隨機(jī)",我們不得不使用復(fù)雜一點的方法來獲得隨機(jī)種子。在上面的這段程序中,我們首先使用系統(tǒng)時間作為隨機(jī)種子,然后將上一次產(chǎn)生的隨機(jī)數(shù)跟循環(huán)變量和一個與系統(tǒng)時間有關(guān)的整型參數(shù)相乘,以之作為隨機(jī)種子,從而得到了每次都不同的隨機(jī)種子,保證了產(chǎn)生足夠"隨機(jī)"的隨機(jī)數(shù)。

函數(shù)getNum是一遞歸,用它來檢測生成的隨機(jī)數(shù)是否有重復(fù),如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。值得注意的是要用一同一個隨機(jī)數(shù)實例生成,所以ra要作為參數(shù)傳入getNum中,否則生成的數(shù)字會有重復(fù)。
復(fù)制代碼 代碼如下:

publicint getNum(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ī)獲取。
getNum(arrNum,tmp,minValue,maxValue,ra);//遞歸:如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。
}

}
return tmp;
}

最后就是要顯示出來,當(dāng)點擊一個button時取出的數(shù)字顯示在一個label中。
復(fù)制代碼 代碼如下:

privatevoid button1_Click(object sender, System.EventArgs e)
{
int[] arr=getRandomNum(6,1,20); //從1至20中取出6個互不相同的隨機(jī)數(shù)
int i=0;
string temp="";
while (i<=arr.Length-1){
temp =arr[i].ToString() "";
i ;
}
label1.Text=temp; //顯示在label1中
}

相關(guān)文章

  • C#怎么給PDF添加背景圖片

    C#怎么給PDF添加背景圖片

    無論是辦公還是日常生活中都經(jīng)常會用到,很多時候,PDF文件的背景色都是白色,看多了難免覺得累,更換PDF的背景不僅可以讓眼睛看起來更舒服,還可以讓PDF文件看上去更美觀。這篇文章我主要寫的是如何使用C# 給PDF文件添加圖片背景
    2016-02-02
  • C#中HttpClient使用注意(預(yù)熱與長連接)

    C#中HttpClient使用注意(預(yù)熱與長連接)

    本文主要介紹了C#中HttpClient使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C#調(diào)用js庫的方法小結(jié)

    C#調(diào)用js庫的方法小結(jié)

    本文主要介紹了C#調(diào)用js庫的方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • C#計算兩個時間差的方法代碼分享

    C#計算兩個時間差的方法代碼分享

    做項目需要用到計算時間差,就整理出來供有需要的朋友參考一下
    2013-12-12
  • C#基于SQLiteHelper類似SqlHelper類實現(xiàn)存取Sqlite數(shù)據(jù)庫的方法

    C#基于SQLiteHelper類似SqlHelper類實現(xiàn)存取Sqlite數(shù)據(jù)庫的方法

    這篇文章主要介紹了C#基于SQLiteHelper類似SqlHelper類實現(xiàn)存取Sqlite數(shù)據(jù)庫的方法,涉及C#操作SQLite數(shù)據(jù)庫的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C# Onnx實現(xiàn)DIS高精度圖像二類分割

    C# Onnx實現(xiàn)DIS高精度圖像二類分割

    這篇文章主要為大家詳細(xì)介紹了C# Onnx實現(xiàn)DIS高精度圖像二類分割的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • C# 泛型集合的自定義類型排序的實現(xiàn)

    C# 泛型集合的自定義類型排序的實現(xiàn)

    這篇文章主要介紹了C# 泛型集合的自定義類型排序的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C#泛型約束的深入理解

    C#泛型約束的深入理解

    本篇文章是對C#中的泛型約束進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c#實現(xiàn)斷點續(xù)傳功能示例分享

    c#實現(xiàn)斷點續(xù)傳功能示例分享

    這篇文章主要介紹了c#實現(xiàn)的斷點續(xù)傳功能示例,斷點續(xù)傳就是在上一次下載時斷開的位置開始繼續(xù)下載。在HTTP協(xié)議中,可以在請求報文頭中加入Range段,來表示客戶機(jī)希望從何處繼續(xù)下載,下面是示例,需要的朋友可以參考下
    2014-03-03
  • C#使用符號表實現(xiàn)查找算法

    C#使用符號表實現(xiàn)查找算法

    本文詳細(xì)講解了C#使用符號表實現(xiàn)查找算法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04

最新評論