a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

c# 隨機函數的使用詳解

2020-01-24 03:13:13
字體:
來源:轉載
供稿:網友
復制代碼 代碼如下:

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

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

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

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

不過這樣會有重復,可以給Random一個系統時間做為參數,以此產生隨機數,就不會重復了
第一種方法不指定隨機種子,系統自動選取當前時前作隨機種子:
復制代碼 代碼如下:

Random ra=new Random();

第二種方法是指定一個int型的參數作為隨機種子:
復制代碼 代碼如下:

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

下面我們要用到Random.Next()方法產生隨機數。
復制代碼 代碼如下:

ra.Next();

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

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

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

publicvirtualint Next(int minValue, int maxValue);

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

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); //隨機取數
arrNum[i]=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值賦到數組中
}
return arrNum;
}

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

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

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

publicint getNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra){
int n=0;
while (n<=arrNum.Length-1)
{
if (arrNum[n]==tmp) //利用循環判斷是否有重復
{
tmp=ra.Next(minValue,maxValue); //重新隨機獲取。
getNum(arrNum,tmp,minValue,maxValue,ra);//遞歸:如果取出來的數字和已取得的數字有重復就重新隨機獲取。
}

}
return tmp;
}

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧洲一级毛片 | 久久福利 | 精品国偷自产国产一区 | 高清视频一区二区三区 | 日韩成人在线播放 | 成人激情视频在线免费观看 | 国产成人精品无人区一区 | 免费视频一二三区 | 国产亚洲一区二区三区在线观看 | 久久精品欧美一区二区三区不卡 | 国产激情 | 欧美在线亚洲 | 成人亚洲视频 | 国产精品视频久久久久久 | 亚洲欧美日韩在线 | 成人免费视频观看 | 精品国产一区二区三区四区 | 91精品久久久久久 | 国产一区二区三区在线免费观看 | 青青草久 | 久久亚洲精品裙底抄底 | 人人草人人草 | 精品久久久久一区二区国产 | 欧美一区二区人人喊爽 | 欧美成人久久久免费播放 | 超碰天堂 | 国产精品呻吟av | 日本爽快片毛片 | 99国产精品视频免费观看一公开 | 啪啪免费网站 | 日韩视频一区二区三区 | 欧美黑人一级爽快片淫片高清 | 国产中文字幕在线观看 | 日韩精品久久理论片 | 欧美成人在线影院 | 4hu影视| 亚洲精品电影网在线观看 | 欧美视频在线观看不卡 | 中文字幕日韩一区 | 不卡的av在线播放 | 日韩激情免费 |