• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C#生成隨機(jī)數(shù)

            blog1:
               我們在做能自動生成試卷的考試系統(tǒng)時(shí),常常需要隨機(jī)生成一組不重復(fù)的題目,在.net Framework中提供了一個(gè)專門用來產(chǎn)生隨機(jī)數(shù)的類System.Random。
              對于隨機(jī)數(shù),大家都知道,計(jì)算機(jī)不可能產(chǎn)生完全隨機(jī)的數(shù)字,所謂的隨機(jī)數(shù)發(fā)生器都是通過一定的算法對事先選定的隨機(jī)種子做復(fù)雜的運(yùn)算,用產(chǎn)生的結(jié)果來近似的模擬完全隨機(jī)數(shù),這種隨機(jī)數(shù)被稱 作偽隨機(jī)數(shù)。偽隨機(jī)數(shù)是以相同的概率從一組有限的數(shù)字中選取的。所選數(shù)字并不具有完全的隨機(jī)性,但是從實(shí)用的角度而言,其隨機(jī)程度已足夠了。偽隨機(jī)數(shù)的選 擇是從隨機(jī)種子開始的,所以為了保證每次得到的偽隨機(jī)數(shù)都足夠地“隨機(jī)”,隨機(jī)種子的選擇就顯得非常重要。如果隨機(jī)種子一樣,那么同一個(gè)隨機(jī)數(shù)發(fā)生器產(chǎn)生 的隨機(jī)數(shù)也會一樣。一般地,我們使用同系統(tǒng)時(shí)間有關(guān)的參數(shù)作為隨機(jī)種子,這也是.net Framework中的隨機(jī)數(shù)發(fā)生器默認(rèn)采用的方法。
              我們可以使用兩種方式初始化一個(gè)隨機(jī)數(shù)發(fā)生器:
              第一種方法不指定隨機(jī)種子,系統(tǒng)自動選取當(dāng)前時(shí)間作為隨機(jī)種子:
              Random ro new Random();
              第二種方法可以指定一個(gè)int型參數(shù)作為隨機(jī)種子:
              int iSeed=10;
              Random ro new Random(10);
              long tick DateTime.Now.Ticks;
              Random ran new Random((int)(tick 0xffffffffL) (int) (tick >> 32));
              這樣可以保證99%不是一樣。
              之后,我們就可以使用這個(gè)Random類的對象來產(chǎn)生隨機(jī)數(shù),這時(shí)候要用到Random.Next()方法。這個(gè)方法使用相當(dāng)靈活,你甚至可以指定產(chǎn)生的隨機(jī)數(shù)的上下限。
              不指定上下限的使用如下:
              int iResult;
              iResult=ro.Next();
              下面的代碼指定返回小于100的隨機(jī)數(shù):
              int iResult;
              int iUp=100;
              iResult=ro.Next(iUp);
              而下面這段代碼則指定返回值必須在50-100的范圍之內(nèi):
              int iResult;
              int iUp=100;
              int iDown=50;
              iResult=ro.Next(iDown,iUp);
              除了Random.Next()方法之外,Random類還提供了Random.NextDouble()方法產(chǎn)生一個(gè)范圍在0.0-1.0之間的隨機(jī)的雙精度浮點(diǎn)數(shù):
              double dResult;
              dResult=ro.NextDouble();
              但是用Random類生成題號,會出現(xiàn)重復(fù),特別是在數(shù)量較小的題目中要生成不重復(fù)的的題目是很難的,參考了網(wǎng)上的一些方法,包括兩類,一類是通過隨機(jī)種子入手,使每一次的隨機(jī)種子不同,來保證不重復(fù);第二類是使用一些數(shù)據(jù)結(jié)構(gòu)和算法。下面主要就第二類介紹幾個(gè)方法。
               
                方法1:思想是用一個(gè)數(shù)組來保存索引號,先隨機(jī)生成一個(gè)數(shù)組位置,然后把這個(gè)位置的索引號取出來,并把最后一個(gè)索引號復(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 0; 15; i++)
                index i;
              Random new Random();
              //用來保存隨機(jī)生成的不重復(fù)的10個(gè)數(shù)
              int[] result new int[10];
              int site 15;//設(shè)置下限
              int id;
              for (int 0; 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--;
              } 


              方法2:利用Hashtable。[NextPage]

               Hashtable hashtable new Hashtable();
              Random rm new Random();
              int RmNum 10;
              for (int 0; hashtable.Count RmNum; i++)
              {
                  int nValue rm.Next(100);
                  if (!hashtable.ContainsValue(nValue) && nValue != 0)
                  {
                   hashtable.Add(nValue, nValue);
                   Console.WriteLine(nValue.ToString());
                  }
              } 


              方法3:遞歸,用它來檢測生成的隨機(jī)數(shù)是否有重復(fù),如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。

              Random ra=new Random(unchecked((int)DateTime.Now.Ticks));
              int[] arrNum=new int[10];
              int tmp=0;
              int minValue=1;
              int maxValue=10;
              for (int i=0;i<10;i++)
              {
                tmp=ra.Next(minValue,maxValue); //隨機(jī)取數(shù)
                arrNum=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值賦到數(shù)組中
              }
              .........
              .........
              public int getNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra)
              {
                int n=0;
                while (n<=arrNum.Length-1)
                {
                  if (arrNum[n]==tmp) //利用循環(huán)判斷是否有重復(fù)
                  {
                    tmp=ra.Next(minValue,maxValue); //重新隨機(jī)獲取。
                    getNum(arrNum,tmp,minValue,maxValue,ra);//遞歸:如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。
                  }
                n++;
                }
                return tmp;
              } 
            blog2:
             /// <summary>
              /// 功能描述:返回不重復(fù)隨機(jī)數(shù)數(shù)組
              /// 作者:    楊艷峰
              /// 創(chuàng)建日期:2006-4-30
              /// </summary>
              /// <param name="Num">隨機(jī)數(shù)個(gè)數(shù)</param>
              /// <param name="minNum">隨機(jī)數(shù)下限</param>
              /// <param name="maxNum">隨機(jī)數(shù)上限</param>
              /// <returns></returns>
              public int[] GetRandomArray(int Number,int minNum,int maxNum)
              {
               int j;
               int[] b=new int[Number];
               Random r=new Random();
               for(j=0;j<Number;j++)
               {
                int i=r.Next(minNum,maxNum+1);
                int num=0;
                for(int k=0;k<j;k++)
                {
                 if(b[k]==i)
                 {
                  num=num+1;
                 }
                }
                if(num==0 )
                {
                 b[j]=i;
                }
                else
                {
                 j=j-1;
                }
               }
               return b;
              }


            blog3:

            public static string GetRandomPassword(int length)
            {
            byte[] random = new Byte[length/2];
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
            rng.GetNonZeroBytes(random);

            StringBuilder sb = new StringBuilder(length);
            int i;
            for (i = 0; i < random.Length; i++)
            {
            sb.Append(String.Format("{0:X2}",random[i]));
            }
            return sb.ToString();
            }



            blog4:
            Random   newRandom=new   Random();  
              string   tempRandom="";  
              for(int   i=0;i<4;i++)  
                    {  
                      string   t=Convert.ToInt16(9*a.NextDouble()).ToString();  
                     
                      tempRandom+=t;  
                   
                    }

            生成9位  
              Random   newRandom=new   Random();  
              string   tempRandom="";  
              for(int   i=0;i<9;i++)  
                    {  
                      string   t=Convert.ToInt16(9*a.NextDouble()).ToString();  
                     
                      tempRandom+=t;  
                   
                    }  
              隨機(jī)生成“0”或“1”字符  
               
              Random   newRandom=new   Random();  
              string   tempRandom="";  
              for(int   i=0;i<1;i++)  
                    {  
                      string   t=Convert.ToInt16(1*a.NextDouble()).ToString();  
                     
                      tempRandom+=t;  
                   
                    }   
               
            更正.請把     Random   newRandom=new   Random();     換成       Random   a=new   Random();

            public   string   GetRandom(int   length)  
              {  
              string   radstr   =   "";  
              Random   random   =   new   Random();  
              for   (int   i=0;i<length;i++)  
              {  
              int   a   =   random.Next(10);  
              radstr+=a.ToString();  
              }  
              return   radstr;  
              }

            blog5:

            C#生成隨機(jī)數(shù)小結(jié)

            C#的Random類的實(shí)例方法Next可以生成一串偽隨機(jī)數(shù),Next有三個(gè)重載函數(shù):

            程序代碼 程序代碼
            public virtual int Next();
            public virtual int Next(int maxValue);
            public virtual int Next(int minValue, int maxValue);


            1.public virtual int Next()
            說明:返回大于或等于零且小于 System.Int32.MaxValue 的 32 位帶符號整數(shù)。
            程序代碼 程序代碼
            Random rand = new Random();
            Response.Write(rand.Next());

            2.public virtual int Next(int maxValue)
            說明:返回大于或等于零且小于 maxValue 的 32 位帶符號整數(shù)。
            程序代碼 程序代碼
            Random rand = new Random();
            Response.Write(rand.Next(100));

            3.public virtual int Next(int minValue, int maxValue)
            說明:返回一個(gè)大于或等于 minValue 且小于 maxValue 的 32 位帶符號整數(shù)。
            程序代碼 程序代碼
            Random rand = new Random();
            Response.Write(rand.Next(1000,2000));

            和Random類相似的還有一個(gè)類Guid,可以用它的靜態(tài)方法NewGuid來返回一個(gè)全局唯一標(biāo)識符:

            程序代碼 程序代碼
            Response.Write(Guid.NewGuid().ToString());


            blog6:

            # regular
                    /// <summary>
                    /// 返回大于或等于零且小于 System.Int32.MaxValue 的 32 位帶符號整數(shù)。
                    /// </summary>
                    /// <returns></returns>
                    public static void Next1()
                    {
                        Random rand = new Random();
                        Console.WriteLine(rand.Next());
                    }
                    /// <summary>
                    /// 返回大于或等于零且小于 maxValue 的 32 位帶符號整數(shù)
                    /// </summary>
                    /// <param name="maxValue"></param>
                    /// <returns></returns>
                    public static void Next2(int maxValue)
                    {
                        Random rand = new Random();
                        Console.WriteLine(rand.Next(100));
                    }
                    /// <summary>
                    /// 返回一個(gè)大于或等于 minValue 且小于 maxValue 的 32 位帶符號整數(shù)。
                    /// </summary>
                    /// <param name="minValue"></param>
                    /// <param name="maxValue"></param>
                    /// <returns></returns>
                    public static void Next3(int minValue, int maxValue)
                    {
                        Random rand = new Random();
                        Console.WriteLine(rand.Next(1000, 2000));
                    }

            /// <summary>
            /// C#中隨機(jī)生成指定長度的密碼
            /// </summary>

            private static string MakePassword(int pwdLength)
               {
                //聲明要返回的字符串
                string tmpstr = "";
                //密碼中包含的字符數(shù)組
                string pwdchars="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                //數(shù)組索引隨機(jī)數(shù)
                int iRandNum;
                //隨機(jī)數(shù)生成器
                Random rnd = new Random();
                for(int i=0;i<pwdLength;i++)
                {
                 //Random類的Next方法生成一個(gè)指定范圍的隨機(jī)數(shù)
                 iRandNum = rnd.Next(pwdchars.Length);
                 //tmpstr隨機(jī)添加一個(gè)字符
                 tmpstr += pwdchars[iRandNum];
                }
                return tmpstr;
               }
            #endregular




            posted on 2008-10-20 21:58 Amigo 閱讀(7703) 評論(1)  編輯 收藏 引用

            評論

            # re: C#生成隨機(jī)數(shù)[未登錄] 2011-08-26 15:34 Terry

            方法1:思想 ....
            .....
              int[] index = new int[15];
              for (int i = 0; i < 15; i++)
                index = i; <--- 這裡是什么意思, 好像不能通過編譯??
              回復(fù)  更多評論   


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(4)

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲午夜精品久久久久久人妖| 久久中文字幕人妻丝袜| 亚洲AV无码成人网站久久精品大| 久久精品综合网| 欧美噜噜久久久XXX| 狠狠人妻久久久久久综合蜜桃| 亚洲国产一成久久精品国产成人综合| 久久无码专区国产精品发布| 996久久国产精品线观看| 久久精品国产国产精品四凭 | 伊人久久大香线蕉综合5g| 久久国产劲爆AV内射—百度| 热久久这里只有精品| 亚洲综合久久夜AV | 久久久久久免费一区二区三区| 色综合久久夜色精品国产| www.久久99| 国产成人久久精品一区二区三区| 蜜桃麻豆www久久| 精品无码久久久久久尤物| 久久精品无码一区二区WWW| 久久99精品久久久久久水蜜桃 | 欧美性猛交xxxx免费看久久久| 亚洲AV无码久久精品色欲| 人妻丰满?V无码久久不卡| 日本一区精品久久久久影院| 777午夜精品久久av蜜臀| 久久频这里精品99香蕉久| 人妻中文久久久久| 很黄很污的网站久久mimi色| 国产精品毛片久久久久久久| 欧美熟妇另类久久久久久不卡| 久久综合九色综合网站| 欧美伊人久久大香线蕉综合| 亚洲精品视频久久久| 久久精品成人影院| 久久性生大片免费观看性| 精品久久久久久无码免费| 国产精品免费久久| 欧美久久久久久精选9999| 久久久久国产|