8使用数组和集合_第1页
8使用数组和集合_第2页
8使用数组和集合_第3页
8使用数组和集合_第4页
8使用数组和集合_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、安徽机电职业技术学院信息工程系安徽机电职业技术学院信息工程系汪学文汪学文(wxwoop)2013年年10月月8 使用数组和集合使用数组和集合28 使用数组和集合使用数组和集合q数组数组是一种自定义类型,是是一种自定义类型,是引用类型引用类型。q数组是一个数组是一个无序无序的的元素序列元素序列。数组中的所有元素都具有数组中的所有元素都具有相同的类型相同的类型数组中的元素存储在连续的内存块中,使用数组中的元素存储在连续的内存块中,使用整数的索引整数的索引来来访问。访问。q本课主要介绍以下内容:本课主要介绍以下内容:定义和初始化数组定义和初始化数组访问数组和数组元素访问数组和数组元素认识数组作为方法

2、的参数的作用认识数组作为方法的参数的作用理解参数数组理解参数数组了解一些常用集合类的使用了解一些常用集合类的使用38.1 声明数组变量声明数组变量qc#中,可以创建一维数组中,可以创建一维数组type arrayname;int array1;?int array2 = new int5;int array3 = new int1,3,5,7,9;int array4 = 1,2,3,4,5,6;栈栈堆堆示例代码位于示例代码位于“lesson7usearray”48.1 声明数组变量声明数组变量qc#中,还可以创建多维数组中,还可以创建多维数组type, arrayname;int, arra

3、y5 = new int2,3;int array6 = 1,2,3,4,5,6;栈栈堆堆示例代码位于示例代码位于“lesson7usearray”58.1 声明数组变量声明数组变量qc#中,还可以创建交错数组中,还可以创建交错数组(数组的数组数组的数组)type arrayname;int array7 = new int6;array71 = new int41,2,3,4;array72 = 1,3,5,7,9;栈栈堆堆示例代码位于示例代码位于“lesson7usearray”68.1 声明数组变量声明数组变量q数组是对象,使用时要用数组是对象,使用时要用newnew进行实例化进行实例化

4、q允许创建大小为允许创建大小为0 0的数组。的数组。q数组可以是一维、多维或交错的。数组可以是一维、多维或交错的。q数值数组元素的默认值设置为零,而引用元素的默认数值数组元素的默认值设置为零,而引用元素的默认值设置为值设置为 null。q交错数组是数组的数组,因此其元素是引用类型并初交错数组是数组的数组,因此其元素是引用类型并初始化为始化为 null。q数组的索引从零开始:具有数组的索引从零开始:具有 n 个元素的数组的索引是个元素的数组的索引是从从 0 到到 n-1。q数组元素可以是任何类型,包括数组类型。数组元素可以是任何类型,包括数组类型。78.2 访问数组成员访问数组成员q初始化数组初

5、始化数组q访问数组成员访问数组成员q大括号中的值不都是常数,可以是在运行时通过运算而大括号中的值不都是常数,可以是在运行时通过运算而得到的值:得到的值:int numbers = new int510, 9, 8, 7, 6;numbers4 = 5; string animal = mouse, cat, lion; animal1= elephant;string someanimal = animal2;random r = new random();int pins = new int4 r.next()%100,r.next()%100, r.next()%100,r.next()%

6、100;示例代码位于示例代码位于“lesson7usearray”88.2.1 遍历整个数组遍历整个数组q使用使用 forfor语句可以遍历所有数组元素语句可以遍历所有数组元素int numbers = 4, 5, 6, 1, 2, 3, -2, -1, 0; for (int i = 0; i numbers.length; i+ ) console.writeline(numbersi);示例代码位于示例代码位于“lesson7usearray”98.2.2 遍历整个数组遍历整个数组q使用使用 foreach foreach 语句为数组中的每一个元素反复执行语句为数组中的每一个元素反复执行

7、嵌入的代码嵌入的代码int numbers = 4, 5, 6, 1, 2, 3, -2, -1, 0; foreach (int i in numbers) console.writeline(i);示例代码位于示例代码位于“lesson7usearray”108.2.3 for与与foreach的比较的比较qforeach语句总是遍历整个数组。如果只需要遍历数组语句总是遍历整个数组。如果只需要遍历数组的特定部分(如前半部分),或者绕过特定元素(如的特定部分(如前半部分),或者绕过特定元素(如只遍历索引为偶数的元素),最好是使用只遍历索引为偶数的元素),最好是使用for语句。语句。qfore

8、ach语句总是从索引语句总是从索引0遍历到索引遍历到索引length-1,如果,如果需要反向遍历,那么最好是使用需要反向遍历,那么最好是使用for语句。语句。q如果循环体需要知道元素索引,而不仅仅是元素值,如果循环体需要知道元素索引,而不仅仅是元素值,那么必须使用那么必须使用for语句。语句。q如果需要修改数组元素,那么必须使用如果需要修改数组元素,那么必须使用for语句,因为语句,因为foreach语句的循环变量是一个只读变量。语句的循环变量是一个只读变量。118.2.4 数组的有关属性数组的有关属性q数组的属性:数组的属性:lengthlength:数组包含多少个元素:数组包含多少个元素q

9、数组的方法:数组的方法:cloneclone:获取与源数组一模一样的数组:获取与源数组一模一样的数组copytocopyto:将源数组拷贝到目标数组的指定位置:将源数组拷贝到目标数组的指定位置qarrayarray类的方法:类的方法:sortsort:排序:排序reversereverse:反转:反转128.2.5 理解深拷贝与浅拷贝理解深拷贝与浅拷贝q阅读教材阅读教材p176p176关于关于“复制数组复制数组”一节一节q如果数组元素是引用类型,进行数组元素复制时,只如果数组元素是引用类型,进行数组元素复制时,只复制对象的引用,不会为新数组对象分配新的内存空复制对象的引用,不会为新数组对象分配

10、新的内存空间。这称为间。这称为“浅拷贝浅拷贝”参考示例代码位于参考示例代码位于“lesson8usearray”中的中的step 4这里定义了一个这里定义了一个person数组,而数组,而person是一个对象是一个对象138.3 认识集合认识集合q数组的大小是固定的。如果要扩容,需要重新使用数组的大小是固定的。如果要扩容,需要重新使用new来分配来分配内存空间。内存空间。q有时,还有其它一些要求,如:有时,还有其它一些要求,如:先进先出,先进先出,fifo,即队列,即队列后进先出,后进先出,lifo,即栈,即栈按键值查找,即字典功能按键值查找,即字典功能有序有序q教材教材p184192介绍了

11、以下集合类型,请自动阅读介绍了以下集合类型,请自动阅读arraylist,顺序表,顺序表queue,队列,队列stack,栈,栈hashtable,哈希表,实现字典功能,哈希表,实现字典功能sortedlist,有序表,有序表148.3.1 示例:宾馆住宿程序示例:宾馆住宿程序q主要学习使用集合类对象,将数据绑定到主要学习使用集合类对象,将数据绑定到combobox控控件件了解数据绑定了解数据绑定熟悉熟悉list类型的使用类型的使用158.3.1.1 定义定义room类类roomtype属性将对应下拉列表控制显示的名称属性将对应下拉列表控制显示的名称price字段,用于选取下拉列表时,获取对应

12、的值字段,用于选取下拉列表时,获取对应的值168.3.2 声明列表对象并初始化声明列表对象并初始化指定数据源指定数据源指定显示字段指定显示字段指定值字段指定值字段也可以使用也可以使用arraylist,但,但效率不高效率不高178.3.3 计算计算数据绑定后,可以使用数据绑定后,可以使用selectedvalue属性获取选择项的值,属性获取选择项的值,省去了原来的许多判断。省去了原来的许多判断。188.4 数组作为方法的参数数组作为方法的参数q为演示数组作方法的参数,我们来编写一组方法为演示数组作方法的参数,我们来编写一组方法q方法方法1 1:将数组内容转换为字符串:将数组内容转换为字符串方法

13、名:方法名:arraytostringarraytostring功能:将数组内容转换为字符串功能:将数组内容转换为字符串参数:参数:int arrayint array返回值:返回值:string, string, 表示数组内容的字符串表示数组内容的字符串示例代码位于示例代码位于“lesson7arraysample”198.4.1 arraytostring方法方法private string arraytostring(int array) / 如果如果array为空,或者为空,或者array中无元素,返回空串中无元素,返回空串 if (array = null) return strin

14、g.empty; if (array.length = 0) return string.empty; string s = string.format(0, array0); for (int i=1; i0) aver = (double)sum/array.length;这样计算可以吗?这样计算可以吗?示例代码位于示例代码位于“lesson7arraysample”28另一个另一个sum方法方法private void button3_click(object sender, eventargs e) output(计算一组数计算一组数11,12,13,14,15,16,17和与平均值:

15、和与平均值:); int sum = 0; double average = 0.0; sum(sum, average,11, 12, 13, 14, 15, 16, 17); output(string.format(这组数的和是这组数的和是0,平均值是平均值是1,sum,average);因为方法参数默认是按值进因为方法参数默认是按值进行传递的。行传递的。能不能够像指针一样,使用能不能够像指针一样,使用按地址传递呢?按地址传递呢?示例代码位于示例代码位于“lesson7arraysample”29使用使用ref关键字关键字private void sum(ref int sum, ref

16、 double aver, params int array) sum = 0; aver = 0.0; foreach (int i in array) sum += i; if (array.length0) aver = (double)sum/array.length;参数列表中使用参数列表中使用ref关键字,编译器就知道相应变量的数值将关键字,编译器就知道相应变量的数值将通过引用来传递。调用方法时,也必须对实参使用通过引用来传递。调用方法时,也必须对实参使用ref关键字关键字示例代码位于示例代码位于“lesson7arraysample”30使用使用ref关键字关键字private

17、void button3_click(object sender, eventargs e) output(计算一组数计算一组数11,12,13,14,15,16,17和与平均值:和与平均值:); int sum = 0; double average = 0.0; sum(ref sum, ref average, 11, 12, 13, 14, 15, 16, 17); output(string.format(这组数的和是这组数的和是0,平均值是平均值是1,sum,average);调用时也须使用调用时也须使用ref关键字关键字示例代码位于示例代码位于“lesson7arraysampl

18、e”318.4.6 编写第编写第4个方法:个方法:generatearrayq方法方法4 4:给数组元素赋随机值:给数组元素赋随机值方法名:方法名:generatearraygeneratearray功能:逐个给数组中的每个元素赋随机值功能:逐个给数组中的每个元素赋随机值参数:参数:int arrayint array返回值:无返回值:无private void button1_click(object sender, eventargs e) int number = new int10; (number); output(数组中的数为:数组中的数为:); output(arraytostr

19、ing(number); output(string.format(这组数的和是:这组数的和是:0, arraysum(number);示例代码位于示例代码位于“lesson7arraysample”32generatearray方法方法private void generatearray(int array) random r = new random(); for (int i = 0; i array.length; i+) arrayi = r.next(0, 100); 因为数组变量本身是引用类因为数组变量本身是引用类型,所以型,所以generatearray方法可以改变方法可以改变

20、array数组元数组元素的值素的值示例代码位于示例代码位于“lesson7arraysample”33另一个另一个generatearray方法方法q方法方法5 5:给数组元素赋随机值:给数组元素赋随机值方法名:方法名:generatearraygeneratearray功能:对数组功能:对数组arrayarray初始化,并对每个元素赋随机值初始化,并对每个元素赋随机值参数:参数:int array, int count(int array, int count(表示要多少个数表示要多少个数) )返回值:无返回值:无private void button1_click(object sende

21、r, eventargs e) int number; (number, 10); output(数组中的数为:数组中的数为:); output(arraytostring(number); output(string.format(这组数的和是:这组数的和是:0, arraysum(number);这儿说明,对数组初始化要这儿说明,对数组初始化要在在generatearray方法内方法内部进行部进行示例代码位于示例代码位于“lesson7arraysample”34另一个另一个generatearray方法方法private void generatearray(int array, int count) array = new intcount; random r = new random(); for (int i = 0; i array.length; i+) arrayi = r.next(0, 100); 编译时出错。编译时出错。使用使用ref关键字说明参数关键字说明参数array,编译时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论