標籤:.net framework random 遍曆 asp.net c#
從n個數中隨機選取m(m<=n)個不重複的數並且對選取的m個數進行排序
在老師布置作業的時候就想到要用數組的一些知識:
(1) Array(包含AraayList,Hashtable等一些特殊的數組)提供了Sort方法來進行排序,但它常與Reverse方法(反轉數組中元素的順序)一起配合使用。
Sort方法,接受一個數組,將其實現升序,格式為:Array.Sort(數組)
Reverse方法,接受一個數組,將其反轉數組中元素的順序,格式為:Array.Reverse(數組)
(2)ArrayList(動態數組)提供了兩種方法用於向ArrayList添加元素,即Add和AddRange。
Add方法將單個元素添加到列表的尾部,其格式為:ArrayList 對象.Add(要添加的值)
AddRange方法擷取一個實現ICollection介面的集合執行個體,並將這個集合執行個體按順序添加到列表的尾部,其格式為:ArrayList 對象.AddRange(要添加的數組)
(3)Array提供的數組元素的遍曆,最好使用foreach語句
(4)還需要用到一個新的知識點就是C#Random()隨機函數,Random.Next()返回非負隨機數。
隨機數的使用很普遍,可用它隨機顯示圖片,用它防止無聊的人在論壇灌水還可以用來加密資訊等等。本文討論如何在一段數字區間內隨機產生若干個互不相同的隨機數,比如在從1到20間隨機產生6個互不相同的整數,並通過此文介紹Visual c#中隨機數的用法。.net.Frameword中提供了一個專門產生隨機數的類System.Random,此類預設情況下已被導入,編程過程中可以直接使用。我們知道,電腦並不能產生完全隨機的數字,它產生的數字被稱為偽隨機數,它是以相同的機率從一組有限的數字中選取的,所選的數字並不具有完全的隨機性,但就實用而言,其隨機程度已經足夠了。
第一次嘗試代碼
using System;using System.Collections;//使用ArrayList類需要引入的命名空間using System.Linq;using System.Text;using System.Threading.Tasks;namespace Text{ class Program { static void Main(string[] args) { ArrayList al = new ArrayList();//建立一個ArrayList類的對象al Random rm = new Random();//建立一個Random類的對象rm for (int i = 0; i < 10; i++) { int sjs = rm.Next(1,50);//調用Random類的隨機選取非負數方法 al.Add(sjs);//調用ArrayList類的元素末尾添加方法 } al.Sort();//數組元素的升序排序 foreach (int temp in al) { Console.WriteLine(temp); } Console.ReadLine(); } }}
輸出的結果為:
從上面輸出的結果來看輸出的10個數還是有重複的,雖然有時候輸出的是不重複的,但是如果一定要輸出不重複的10個隨機數就要考慮怎麼去除重複的數並進行再次的選取。
第二次代碼嘗試
using System;using System.Collections;//使用ArrayList類需要引入的命名空間using System.Linq;using System.Text;using System.Threading.Tasks;namespace Text{ class Program { static void Main(string[] args) { ArrayList al = new ArrayList(); Random rm = new Random(); int i = 0; while (i < 10) { int sjs = rm.Next(1, 50); bool IsExist = false;//定義一個布爾型變數並且賦值為false foreach (int item in al)//判斷選取的隨機數是否相同 { if (sjs == item) { IsExist = true;//如果相同就終止添加到選取數組的末尾 break; } else { IsExist = false;//如果不相同就添加到選取數組中的末尾 } } if (IsExist) { continue; } else { al.Add(sjs); i++; } } al.Sort(); foreach (int temp in al) { Console.WriteLine(temp); } Console.ReadLine(); } }}
輸出的結果為:
再一次代碼輸出運行了幾次終於是沒有重複的了,記得老師還講了兩種方法,有時間了再進行補充。
C#作業