產生不重複隨機數的方法
我在青鳥學習的時候,遇到過這樣的問題。老師給的方法感覺有點不太好。
產生的數是從大到小排列的,感覺不太舒服。在網上也搜過一些。也沒有得到
滿意答案(可能因為自己沒有看懂,或方法不對吧)。
經過自己的努力,終於有了答案,拿出來和大家分享。各位老大,哪裡有
不足和更好的方法請指教。(在vs2005環境,C#語言中實現的)
public partial class Form1 : Form
{
Random ran = new Random(); //定義隨機裝置
int[] arrNum = new int[6]; //定義儲存隨機數的陣列
int temp = 35; //定義一個臨時變數,儲存產生的隨機數
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
int start = 0; //傳入的引數
Getnum(start); //呼叫產生隨機數的方法
for (int i = 0; i < arrNum.Length; i++)
{
//遍歷整個隨機陣列,新增到TextBox中
textBox1.AppendText(arrNum[i].ToString()+"/r/n");
}
}
//產生隨機數的方法
private int[] Getnum(int start)
{
//用引數作為迴圈數
for (; start < arrNum.Length; start++)
{
//迴圈把產生的隨即數新增到陣列中
arrNum[start] = ran.Next(10,20);
if (start >= 1) //當陣列的下標大於等於1時,開始進行比較
{
temp = arrNum[start]; //把產生的隨機數付給臨時變數Temp
//遍歷陣列剛產生數值,當前下標之前,
for (int j = 0; j <start; j++)
{
//如果有相同的
if (temp == arrNum[j])
{
//遞迴呼叫方法,引數為陣列現在的下標
Getnum(start);
}
//else
//{
// continue;
//}
}
}
}
//返回陣列
return arrNum;
}
}
因為是當時的程式碼,沒有做什麼修改。請大家見諒。
這個東西還很不成熟。可以做成一個dll檔案,方便以後呼叫,可以在裡面做一下
隨機數個數,起始值,最大值的判斷,異常處理。呼叫的時候就不用try---catch
了(try---catch寫對了嘛!)。