C#?生成隨機數(shù)的方法示例
C# 提供了一種強大而方便的工具類 Random
,用于生成隨機數(shù)。這里將分類討論如何通過 C# 實現(xiàn)隨機數(shù)生成,以及應(yīng)用于實際情況中的一些具體方案。
一、Random 類概述
Random
類表示一個偽隨機數(shù)生成器,用于生成滿足隨機性統(tǒng)計要求的數(shù)字序列。
重載的 Random.Next()
Random.Next()
方法提供了三種重載:
Next()
:生成大于等于 0 且小于Int32.MaxValue
的 32 位整數(shù)。Next(int minValue, int maxValue)
:生成從minValue
(包括) 到maxValue
(不包括) 的整數(shù)。
示例
/// <summary> /// 生成隨機數(shù)列表 /// </summary> /// <returns></returns> public List<int> RDNumber() { List<int> col = new List<int>(); for (int i = 0; i < 6; i++) { Random rd = new Random(); // 初始化一個新的 Random 實例 var a = rd.Next(); // 生成一個隨機數(shù) col.Add(a); } return col; }
二、生成不重復(fù)的隨機數(shù)
方法一:利用 List 根據(jù)重復(fù)狀態(tài)迭代
通過檢查隨機數(shù)是否存在,防止重復(fù):
/// <summary> /// 指定范圍內(nèi)的不重復(fù)隨機數(shù)(要求隨機數(shù)個數(shù)小于隨機數(shù)范圍否則程序會陷入死循環(huán)??稍谘h(huán)中加入跳出機制) /// </summary> /// <param name="Number">隨機數(shù)個數(shù)</param> /// <param name="minNum">隨機數(shù)下限</param> /// <param name="maxNum">隨機數(shù)上限</param> /// <returns></returns> public List<int> GetRandomArray(int Number, int minNum, int maxNum) { int j; List<int> b = new List<int>(); Random r = new Random(); for (j = 0; j < Number; j++) { int i = r.Next(minNum, maxNum + 1); if (b.Contains(i)) //是否包含這個數(shù) { j = j - 1; } else { b.Add(i); } } return b; }
方法二:使用索引替換
思想是用一個數(shù)組來保存索引號,先隨機生成一個數(shù)組位置,然后把隨機抽取到的位置的索引號取出來,并把最后一個索引號復(fù)制到當前的數(shù)組位置,然后使隨機數(shù)的上限減一,具體如:先把這100個數(shù)放在一個數(shù)組內(nèi),每次隨機取一個位置(第一次是1-100,第二次是1-99,...),將該位置的數(shù)用最后的數(shù)代替。
int[] index = new int[15]; for (int i = 0; i < 15; i++) index[i] = i; Random r = new Random(); //用來保存隨機生成的不重復(fù)的10個數(shù) int[] result = new int[10]; int site = 15;//設(shè)置上限 int id; for (int j = 0; j < 10; j++) { id = r.Next(1, site - 1); //在隨機位置取出一個數(shù),保存到結(jié)果數(shù)組 result[j] = index[id]; //最后一個數(shù)復(fù)制到當前位置 index[id] = index[site - 1]; //位置的上限減少一 site--; }
三、生成字母數(shù)字的隨機組合
這里先說一下說一下ASCII:ASCII(American Standard Code for Information Interchange, 美國標準信息交換代碼)是基于拉丁字母的一套電腦編碼系統(tǒng),主要 用于顯示現(xiàn)代英語和其他西歐語言。它是現(xiàn)今最通用的單字節(jié)編碼 系統(tǒng),并等同于國際標準ISO/IEC 646。
ASCII 系統(tǒng)概述
大寫字母 A-Z 的 ASCII 值范圍為 65-90
小寫字母 a-z 的 ASCII 值范圍為 97-122
示例代碼
/// <summary> /// 生成單個隨機數(shù)字 /// </summary> public int createNum(Random random) { int num = random.Next(10); return num; } /// <summary> /// 生成單個大寫隨機字母 /// </summary> public string createBigAbc(Random random) { //A-Z的 ASCII值為65-90 int num = random.Next(65, 91); string abc = Convert.ToChar(num).ToString(); return abc; } /// <summary> /// 生成單個小寫隨機字母 /// </summary> public string createSmallAbc(Random random) { //a-z的 ASCII值為97-122 int num = random.Next(97, 123); string abc = Convert.ToChar(num).ToString(); return abc; }
生成隨機字母數(shù)字組合
/// <summary> /// 生成隨機字母數(shù)字組合 /// </summary> /// <returns></returns> public string GetRandom() { Random random = new Random(); //創(chuàng)建一個StringBuilder對象存儲密碼 StringBuilder sb = new StringBuilder(); //使用for循環(huán)把單個字符填充進StringBuilder對象里面變成14位密碼字符串 for (int i = 0; i < 14; i++) { //隨機選擇里面其中的一種字符生成 switch (random.Next(3)) { case 0: //調(diào)用生成生成隨機數(shù)字的方法 sb.Append(createNum(random)); break; case 1: //調(diào)用生成生成隨機小寫字母的方法 sb.Append(createSmallAbc(random)); break; case 2: //調(diào)用生成生成隨機大寫字母的方法 sb.Append(createBigAbc(random)); break; } } return sb.ToString(); }
到此這篇關(guān)于C# 生成隨機數(shù)的方法的文章就介紹到這了,更多相關(guān)C# 生成隨機數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#不提升自己程序的權(quán)限實現(xiàn)操作注冊表
這篇文章主要介紹了C#不提升自己程序的權(quán)限實現(xiàn)操作注冊表的相關(guān)資料,需要的朋友可以參考下2022-12-12C#創(chuàng)建數(shù)據(jù)庫及附加數(shù)據(jù)庫的操作方法
這篇文章主要介紹了C#創(chuàng)建數(shù)據(jù)庫及附加數(shù)據(jù)庫的操作方法,涉及C#針對數(shù)據(jù)庫常見的創(chuàng)建、添加、連接等操作技巧,需要的朋友可以參考下2016-06-06C#利用反射技術(shù)實現(xiàn)去掉按鈕選中時的邊框效果
這篇文章主要介紹了C#利用反射技術(shù)實現(xiàn)去掉按鈕選中時的邊框效果,涉及C#針對窗口的參數(shù)設(shè)置技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09使用C#創(chuàng)建Windows服務(wù)的實例代碼
這篇文章主要介紹了使用C#創(chuàng)建Windows服務(wù)的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07