1. 程式人生 > >產生不重複隨機數的方法

產生不重複隨機數的方法

      我在青鳥學習的時候,遇到過這樣的問題。老師給的方法感覺有點不太好。

產生的數是從大到小排列的,感覺不太舒服。在網上也搜過一些。也沒有得到

滿意答案(可能因為自己沒有看懂,或方法不對吧)。

      經過自己的努力,終於有了答案,拿出來和大家分享。各位老大,哪裡有

不足和更好的方法請指教。(在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寫對了嘛!)。