从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(); } } }
输出的结果为:
再一次代码输出运行了几次终于是没有重复的了,记得老师还讲了两种方法,有时间了再进行补充。