C#?生成隨機(jī)數(shù)的方法示例
C# 提供了一種強(qiáng)大而方便的工具類 Random ,用于生成隨機(jī)數(shù)。這里將分類討論如何通過(guò) C# 實(shí)現(xiàn)隨機(jī)數(shù)生成,以及應(yīng)用于實(shí)際情況中的一些具體方案。
一、Random 類概述
Random 類表示一個(gè)偽隨機(jī)數(shù)生成器,用于生成滿足隨機(jī)性統(tǒng)計(jì)要求的數(shù)字序列。
重載的 Random.Next()
Random.Next() 方法提供了三種重載:
Next():生成大于等于 0 且小于Int32.MaxValue的 32 位整數(shù)。Next(int minValue, int maxValue):生成從minValue(包括) 到maxValue(不包括) 的整數(shù)。
示例
/// <summary>
/// 生成隨機(jī)數(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(); // 初始化一個(gè)新的 Random 實(shí)例
var a = rd.Next(); // 生成一個(gè)隨機(jī)數(shù)
col.Add(a);
}
return col;
}
二、生成不重復(fù)的隨機(jī)數(shù)
方法一:利用 List 根據(jù)重復(fù)狀態(tài)迭代
通過(guò)檢查隨機(jī)數(shù)是否存在,防止重復(fù):
/// <summary>
/// 指定范圍內(nèi)的不重復(fù)隨機(jī)數(shù)(要求隨機(jī)數(shù)個(gè)數(shù)小于隨機(jī)數(shù)范圍否則程序會(huì)陷入死循環(huán)??稍谘h(huán)中加入跳出機(jī)制)
/// </summary>
/// <param name="Number">隨機(jī)數(shù)個(gè)數(shù)</param>
/// <param name="minNum">隨機(jī)數(shù)下限</param>
/// <param name="maxNum">隨機(jī)數(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)) //是否包含這個(gè)數(shù)
{
j = j - 1;
}
else
{
b.Add(i);
}
}
return b;
}方法二:使用索引替換
思想是用一個(gè)數(shù)組來(lái)保存索引號(hào),先隨機(jī)生成一個(gè)數(shù)組位置,然后把隨機(jī)抽取到的位置的索引號(hào)取出來(lái),并把最后一個(gè)索引號(hào)復(fù)制到當(dāng)前的數(shù)組位置,然后使隨機(jī)數(shù)的上限減一,具體如:先把這100個(gè)數(shù)放在一個(gè)數(shù)組內(nèi),每次隨機(jī)取一個(gè)位置(第一次是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();
//用來(lái)保存隨機(jī)生成的不重復(fù)的10個(gè)數(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);
//在隨機(jī)位置取出一個(gè)數(shù),保存到結(jié)果數(shù)組
result[j] = index[id];
//最后一個(gè)數(shù)復(fù)制到當(dāng)前位置
index[id] = index[site - 1];
//位置的上限減少一
site--;
}三、生成字母數(shù)字的隨機(jī)組合
這里先說(shuō)一下說(shuō)一下ASCII:ASCII(American Standard Code for Information Interchange, 美國(guó)標(biāo)準(zhǔn)信息交換代碼)是基于拉丁字母的一套電腦編碼系統(tǒng),主要 用于顯示現(xiàn)代英語(yǔ)和其他西歐語(yǔ)言。它是現(xiàn)今最通用的單字節(jié)編碼 系統(tǒng),并等同于國(guó)際標(biāo)準(zhǔn)ISO/IEC 646。
ASCII 系統(tǒng)概述
大寫(xiě)字母 A-Z 的 ASCII 值范圍為 65-90
小寫(xiě)字母 a-z 的 ASCII 值范圍為 97-122
示例代碼
/// <summary>
/// 生成單個(gè)隨機(jī)數(shù)字
/// </summary>
public int createNum(Random random)
{
int num = random.Next(10);
return num;
}
/// <summary>
/// 生成單個(gè)大寫(xiě)隨機(jī)字母
/// </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>
/// 生成單個(gè)小寫(xiě)隨機(jī)字母
/// </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;
}生成隨機(jī)字母數(shù)字組合
/// <summary>
/// 生成隨機(jī)字母數(shù)字組合
/// </summary>
/// <returns></returns>
public string GetRandom()
{
Random random = new Random();
//創(chuàng)建一個(gè)StringBuilder對(duì)象存儲(chǔ)密碼
StringBuilder sb = new StringBuilder();
//使用for循環(huán)把單個(gè)字符填充進(jìn)StringBuilder對(duì)象里面變成14位密碼字符串
for (int i = 0; i < 14; i++)
{
//隨機(jī)選擇里面其中的一種字符生成
switch (random.Next(3))
{
case 0:
//調(diào)用生成生成隨機(jī)數(shù)字的方法
sb.Append(createNum(random));
break;
case 1:
//調(diào)用生成生成隨機(jī)小寫(xiě)字母的方法
sb.Append(createSmallAbc(random));
break;
case 2:
//調(diào)用生成生成隨機(jī)大寫(xiě)字母的方法
sb.Append(createBigAbc(random));
break;
}
}
return sb.ToString();
}到此這篇關(guān)于C# 生成隨機(jī)數(shù)的方法的文章就介紹到這了,更多相關(guān)C# 生成隨機(jī)數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#基于HttpWebRequest實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求的方法分析
這篇文章主要介紹了C#基于HttpWebRequest實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求的方法,結(jié)合實(shí)例形式分析了C#使用HttpWebRequest類與System.IO類實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-02-02
C# SQLite序列操作實(shí)現(xiàn)方法詳解
這篇文章主要介紹了C# SQLite序列操作實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了C#實(shí)現(xiàn)SQLite序列操作的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
C# 使用Microsoft Edge WebView2的相關(guān)總結(jié)
這篇文章主要介紹了C# 使用Microsoft Edge WebView2的相關(guān)總結(jié),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02
C#判斷字符串中是否包含指定字符串及contains與indexof方法效率問(wèn)題
這篇文章主要介紹了C#判斷字符串中是否包含指定字符串及contains與indexof方法效率問(wèn)題 ,文中給大家列舉通過(guò)兩種方法來(lái)判斷,需要的朋友可以參考下2018-10-10
C#中DateTime的格式符的實(shí)現(xiàn)示例
本文介紹了C#中DateTime格式符的使用方法,分為預(yù)定義格式和自定義格式兩類,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-12-12
C# Base 64 編碼/解碼實(shí)現(xiàn)代碼
這篇文章主要介紹了C# Base 64 編碼/解碼實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-02-02
詳解如何通過(guò)wireshark實(shí)現(xiàn)捕獲C#上傳的圖片
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)wireshark實(shí)現(xiàn)捕獲C#上傳的圖片,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-11-11
MessageBox的Buttons和三級(jí)聯(lián)動(dòng)效果
這篇文章主要介紹了MessageBox的Buttons和三級(jí)聯(lián)動(dòng)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11

