第07章 数 组.ppt_第1页
第07章 数 组.ppt_第2页
第07章 数 组.ppt_第3页
第07章 数 组.ppt_第4页
第07章 数 组.ppt_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

1、第7章 数 组,7.1 声明和创建数组 7.2 多维数组 7.3 交错数组 7.4 foreach语句 7.5 数组与方法 7.6 Array类 7.7 习题,7.1 声明和创建数组,数组是数据类型相同、数目一定的变量的有序集合,组成数组的变量称为该数组的元素。 内存分配时,数组对应着一组顺序排放的存储单元,数组中的每个元素按照创建时的次序在其中存放。 C#语言中,数组是一种引用类型。使用前需要声明和创建。,7.1.1 声明数组,一维数组的声明形式: 数据类型 数组名 例: int a; string str; 数据类型:可以是C#中任意的数据类型 :表明后面的变量是一个数组类型,必须放在数组

2、名之前 数组名:遵循标识符的命名规则,7.1.1 声明数组(续),数组是一种引用类型。声明数组只是声明了一个用来操作该数组的引用,并不会为数组元素实际分配内存空间。因此,声明数组时,不能指定数组元素个数。例如: int5 a; /错误 int b; /错误,7.1.2 创建数组,声明数组后,在访问其元素前必须为数组的元素分配相应内存,即创建数组。创建一维数组形式如下: 数组名new 数据类型数组元素个数 指定数组元素个数的表达式的值必须是一个大于或等于0的整数. 例: a=new int5; 数组的声明和创建可以出现在同一条语句中。 int a=new int5;,7.1.2 创建数组(续),

3、访问数组中的元素: 数组名索引表达式 注意:索引表达式的最大值是数组元素个数减1,如果指定的索引表达式的值大于最大值或小于0,程序运行时,将会引发异常。 例7-1 创建数组,源代码,运 行,例7-1 创建数组,using System; public class CreateArray public static void Main() int a=new int4; double d=new double3; bool b=new bool2; object o=new object3; Console.Write(int); for(int i=0;ia.Length;i+) Consol

4、e.Write(ta0=1,i,ai);,例7-1 创建数组(续),Console.Write(ndouble); for (int i = 0; i d.Length; i+) Console.Write(td0=1, i, di); Console.Write(nbool); for (int i = 0; i b.Length; i+) Console.Write(tb0=1, i, bi); Console.Write(nobject); for (int i = 0; i o.Length; i+) Console.Write(to0=1, i, oi); Console.Write

5、Line(); ,7.1.2 创建数组(续),C#语言中,所有数组类型都是从System.Array抽象类派生出来的。例7-1中使用的属性Length就是Array类定义的,它返回的是当前数组中元素的个数。 从例7-1中可知,数组的元素一定有初值,默认值与类中字段的值一致。,7.1.2 创建数组(续),引用类型数组中保存的只是对象引用。在访问这些对象的成员前,必须使用new运算符创建实际的对象。 例7-2 引用类型数组,源代码,运 行,例7-2 引用类型数组,using System; public class A private int i; public A(int a) i = a; p

6、ublic int I get return i; ,例7-2 引用类型数组(续),public class ObjectArray public static void Main() A a = new A3; Console.WriteLine(ta.Length=0, a.Length); for (int i = 0; i a.Length; i+) Console.Write(ta0=1, i, ai); Console.WriteLine(); for (int i = 0; i a.Length; i+) ai = new A(2 * i); for (int i = 0; i

7、a.Length; i+) Console.Write(ta0.I=1, i, ai.I); Console.WriteLine(); ,7.1.2 创建数组(续),由例7-2可知,创建引用类型数组后,可以通过其属性Length查询数组中对象引用的个数。 因为这些引用并不一定引用了某个实际对象,因此, Length返回的只是数组中可能存在的实际对象的最大值,而非实际对象个数。 如果要判断数组中某个位置的引用是否引用了实际对象,可以通过检查该引用的值是否为null来实现。,7.1.2 创建数组(续),创建数组时可以给数组元素指定初始值,要求初始值的个数与数组创建的元素的个数一致。例如: int

8、b=new int31,2,3,; int c=new int41,2,3, ; /错误 最后一个初值后的逗号可以不写 注意:在这种初始化形式中,方括号内用于指定数组元素个数的表达式必须是一个常量表达式。例如: int i=3; int c=new inti1,2,3,; /错误 int d=new int2+11,2,3,;/正确,7.1.2 创建数组(续),用于初始化的值的个数必须与数组中元素的个数相同,因此,上述初始化表达式中完全可以不用显式给出元素的个数。 int b=new int1,2,3;/有3个元素 更简洁的初始化方式: int b=1,2,3,; /只能与数组声明出现在同一条

9、语句中 int b; b=1,2,3; /错误 而: int b; b=new int1,2,3;/正确,例7-3 初始化数组,using System; public class A private int i; public A(int a) i = a; public int I get return i; ,例7-3 初始化数组(续),public class InitArray public static void Main() int b=1,2,3; double d=new double1.2,2.4; A a1=new A(1),new A(2); A a2; a2=new

10、A3new A(2),new A(4),new A(6),; for(int i=0;ib.Length;i+) Console.Write(tb0=1t,i,bi); Console.WriteLine();,例7-3 初始化数组(续),for (int i = 0; i d.Length; i+) Console.Write(td0=1, i, di); Console.WriteLine(); for (int i = 0; i a1.Length; i+) Console.Write(ta1 + i + .I= + a1i.I); Console.WriteLine(); for (i

11、nt i = 0; i a2.Length; i+) Console.Write(ta2 + i + .I= + a2i.I); Console.WriteLine(); ,7.2 多维数组,多维数组声明语法形式 数据类型 , , , 数组名 ; 多维数组就是指能用多个下标访问的数组。在声明时方括号内加逗号,就表明是多维数组,有n个逗号,就是n+1维数组。 例: int, array ; array= new int3, 2; int, , array = new int2, 3, 4;,7.2 多维数组(续),创建多维数组时,可以同时初始化: int, array1 = new int4,2

12、 1, 2 , 3, 4 , 5, 6 , 7, 8 ; int, , array2= new int2,1,3 1, 2, 3 , 4, 5, 6 ; int, , array2= new int, 1, 2, 3 , 4, 5, 6 ;,7.2 多维数组(续),也可以采用如下形式声明并创建一个多维数组: int, array4= 1, 2 , 3, 4 , 5, 6 , 7, 8 ; 注意:这种简洁方式只能与数组声明出现在同一条语句中。,7.2 多维数组(续),创建一个多维数组后,就可以通过下述表达式访问其中的元素: 数组名索引表达式1,索引表达式2, 其中,每个索引表达式的值都必须在0到

13、它指定的维度的大小减1之间。 例7-4 多维数组,源代码,运 行,using System; public class DimArray public static void Main() int, array = 1, 2, 3 , 4, 5, 6 ; for (int i = 0; i array.GetLength(0); i+) for (int j = 0; j array.GetLength(1); j+) Console.WriteLine(array01=2, i, j, arrayi, j); Console.WriteLine(); Console.WriteLine(ar

14、ray.GetLength(0)= 0, array.GetLength(0); Console.WriteLine(array.GetLength(1)= 0, array.GetLength(1); Console.WriteLine(array.Length= 0, array.Length); Console.WriteLine(array.Rank= 0, array.Rank); ,Length:返回当前数组中元素的个数 Rand:返回当前数组维数 GetLength:返回当前数组中指定维的长度,课堂练习,定义一个数组,存放一组数据(10个整型),找出这组数中最大数和最小数。,us

15、ing System; class MaxMin public static void Main() int max, min; int queue = new int10 89, 78, 65, 52, 90, 92, 73, 85, 91, 95 ; max = min = queue0; for (int i = 1; i max) max = queuei; if (queuei min) min = queuei; Console.WriteLine(最大数是0,最小数是1, max, min); ,7.3 交错数组,数组元素是数组对象的数组通常被称作交错数组。它的内部每个数组的长度

16、可以不同,就像一个锯齿形状。交错数组声明: 数组类型 数组名 ; 方括号 的个数与数组的维数相关。 例: int jaggedArray = new int3; 从本质上说,它是一个由3个元素组成的一维数组,其中每个元素都是一个一维int型数组。,7.3 交错数组(续),交错数组是数组的数组,因此,从本质上说它是一种引用类型的一维数组,元素默认值为null。在访问其元素前,必须使用new运算符初始化: jaggedArray0 = new int5; jaggedArray1 = new int4; jaggedArray2 = new int2; 交错数组元素中所包含元素的个数可以不同。因此

17、交错数组亦称为不规则数组。,7.3 交错数组(续),可以使用初始值列表来初始化交错数组元素: jaggedArray0 = new int 1, 3, 5, 7, 9 ; jaggedArray1 = new int 0, 2, 4, 6 ; jaggedArray2 = new int 11, 22 ;,7.3 交错数组(续),可以在声明交错数组时直接初始化: int jaggedArray = new int new int 1,3,5,7,9, new int 0,2,4,6, new int 11,22 ; 可以使用下面简介方式: int jaggedArray3 = new int

18、1,3,5,7,9, new int 0,2,4,6, new int 11,22 ;,7.3 交错数组(续),对于上述定义,可以使用如下例所示形式访问交错数组中的个别元素: jaggedArray301 = 77; jaggedArray321 = 88;,7.3 交错数组(续),可以混合使用交错数组和多维数组: int, jaggedArray4 = new int3, new int, 1,3, 5,7 , new int, 0,2, 4,6, 8,10 , new int, 11,22, 99,88, 0,9 ; 对于上述定义,可以使用如下例所示形式访问个别元素: System.Con

19、sole.Write(0, jaggedArray401, 1); /值为7 System.Console.Write(0, jaggedArray412, 1); /值为10,7.3 交错数组(续),与多维数组不同,对于交错数组,属性Length 返回的是包含在当前交错数组中的数组元素的数目。 例: System.Console.WriteLine( jaggedArray4.Length); /输出值3,7.3 交错数组(续),必须注意,即使某个交错数组是“矩形”或“长方体”等形状,也不能使用下述方法创建: int array=new int34; 例7-5 交错数组,源代码,运 行,us

20、ing System; class JaggedArray static void Main() int arr = new int2; arr0 = new int5 1, 3, 5, 7, 9 ; arr1 = new int4 2, 4, 6, 8 ; for (int i = 0; i arr.Length; i+) Console.Write(Element(0): , i); for (int j = 0; j arri.Length; j+) Console.Write(01, arrij, j = (arri.Length - 1) ? : ,); Console.WriteL

21、ine(); ,交错数组元素个数,交错数组第j个元素数组元素的个数,7.4 foreach语句,foreach循环主要用于遍历集合中的每个元素,数组也属于集合类型,因此foreach语句允许用于数组元素的遍历。语法形式: foreach (数据类型 标识符 in 集合表达式 ) 语句; 标识符:是foreach循环的循环变量,它只在foreach语句中有效,并且是一个只读局部变量,也就是说在foreach语句中不能改写这个循环变量。它的类型必须与集合中元素类型相容。 集合表达式:被遍历的集合,例如数组。,7.4 foreach语句,foreach语句的执行顺序是: 首先创建一个循环变量,然后从

22、集合中读取第1个元素赋值给该变量(如果集合中不存在元素,foreach语句的执行自动结束),并执行循环体; 每次执行完循环体后,如果集合中还有剩余元素,就继续按顺序从集合中读取下一个元素赋值给该变量,并执行循环体;否则,结束foreach语句的执行。,7.4 foreach语句(续),foreach语句中循环变量的值在循环体内不应改变。事实上,当循环变量的类型是简单类型时,编译器会阻止这种情况的发生。 例: int arr=1,2,3,4; foreach(int i in arr) i=0;/编译错误 i+;/编译错误 ,7.4 foreach语句(续),当循环变量不属于简单类型时,调用对象

23、的相关方法有可能会改变该变量的值, 但最好不要这样做。例: using System; class A int i; public A(int j) i = j; public int I get return i; set i = value; ,7.4 foreach语句(续),class MyForeach public static void Main() A arr = new A(1), new A(2) ; Console.WriteLine(arr1.I); foreach (A a in arr) a.I = 0; /可行,但最好不要这样 Console.WriteLine(

24、arr1.I); ,例7-6 foreach语句,using System; class MyForeach public static void Main() int result = 0; int arr = 1, 2, 3, 4 ; foreach (int i in arr) result += i; Console.WriteLine(Result=0, result); ,7.4 foreach语句(续),对于多维数组,可以使用相同的方法来循环访问元素。此时,foreach循环从索引全部为开始顺序访问所有的索引组合,右边的索引值先增加,当右边的索引值增加到上限时,被重置为,这时左边

25、的索引值加。例: int, numbers2D = new int3, 2 9, 99 , 3, 33 , 5, 55 ; foreach (int i in numbers2D) System.Console.Write(0 , i);,7.4 foreach语句(续),foreach语句用于交错数组时,通常需要嵌套该循环,才能得到实际的数据。例: int array=new int1,2,new int3,new int4,5,6; 正确的用法: foreach(int i in array) foreach(int j in i) System.Console.WriteLine(j);

26、 ,7.4 foreach语句(续),错误的用法: foreach(int i in array) System.Console.WriteLine(i); 因为数组array中包含的元素是int类型,而不是int类型,必须循环每个数组元素和该交错数组本身。,课堂练习,定义一个二维数组,将二维数组中元素值=60的数据显示,并统计=60的元素个数。使用foreach语句实现。,using System; class ForExam public static void Main() int count; int, arrayNum = new int3, 4 98, 76, 87, 65 , 5

27、5, 68, 57, 84 , 91, 100, 58, 76 ; count = 0; foreach (int x in arrayNum) if (x = 60) count+; Console.Write(0,4:d, x); ,7.5 数组与方法,7.5.1 将数组传递给方法 7.5.2 参数数组 7.5.3 Main方法和命令行参数 7.5.4 返回数组,7.5.1 将数组传递给方法,数组是一种引用类型,其对象可以用作参数传递给方法。这种传递属于引用传递。 例7-7 将数组传递给方法,源代码,运 行,例7-7 将数组传递给方法,using System; public class

28、PassByArray public static void Main() int array1=1,2,3; int array2=array1; int array3;,例7-7 将数组传递给方法(续),Console.WriteLine(以值参数传递一维数组:); Console.Write(调用前:); foreach(int i in array1) Console.Write( 0,i); Console.WriteLine(); FirstDouble(array1); Console.Write(调用后:); foreach(int i in array1) Console.W

29、rite( 0,i); Console.WriteLine(n);,例7-7 将数组传递给方法(续),Console.WriteLine(以引用参数传递数组:); Console.Write(调用前:); foreach(int i in array2) Console.Write( 0,i); Console.WriteLine(); SecondDouble(ref array2); Console.Write(调用后:); foreach(int i in array2) Console.Write( 0,i); Console.WriteLine(n);,例7-7 将数组传递给方法(续

30、),Console.WriteLine(以输出参数传递数组:); Console.WriteLine(调用前没有初始化); FillArray(out array3); Console.Write(调用后:); foreach(int i in array3) Console.Write( 0,i); Console.WriteLine(n); Console.WriteLine(以值参数传递多维数组:); PrintArray(new int, 1, 2 , 3, 4 , 5, 6 , 7, 8 ); ,例7-7 将数组传递给方法(续),public static void FirstDou

31、ble(int array) for(int i=0;iarray.Length;i+) arrayi*=2; array=new int11,22,33; public static void SecondDouble(ref int array) for(int i=0;iarray.Length;i+) arrayi*=2; array=new int11,22,33; ,例7-7 将数组传递给方法(续),public static void FillArray(out int arr) arr = new int5 1, 2, 3, 4, 5 ; public static void

32、PrintArray(int, arr) for (int i = 0; i arr.GetLength(0); i+) for (int j = 0; j arr.GetLength(1); j+) Console.WriteLine(tElement(0,1)=2, i, j, arri, j); ,7.5.2 参数数组,所谓参数数组是指用关键字params修饰的数组类型的形式参数。 使用参数数组,可以直接传递同一类型的数目可变的参数,从而简化了编程。例: class A public static void Method(params int array) ,7.5.2 参数数组(续),

33、对于上述方法,完全可以使用下述语句调用: A.Method(1,2) 编译器会将上述调用语句转换成类似如下的代码: int array=new int1,2; A.Method(array); 当然也可以使用下述语句调用: A.Method(1,2,3),7.5.2 参数数组(续),向参数数组传递多个参数时,实际上,编译器会将这些参数写入一个数组,然后传递给它。因此,参数数组除了可以用多个与参数数组元素类型相容的参数初始化外,还可以用一个元素类型与参数数组的元素类型相同的数组初始化。 例7-8 使用参数数组,源代码,运 行,例7-8 使用参数数组,using System; public cl

34、ass UseParams public static void ParamsMethod1(params int array) for (int i = 0 ; i array.Length; i+) Console.Write(t0,arrayi); Console.WriteLine(n); ,例7-8 使用参数数组(续),public static void ParamsMethod2(params object array) for (int i = 0 ; i array.Length; i+) Console.Write(t0,arrayi); Console.WriteLine

35、(n); ,例7-8 使用参数数组(续),static void Main() ParamsMethod1(1, 2, 3) /传递多个不同类型的参数,但它们都可以隐式转换成object型 ParamsMethod2(11, a, bbb,44); int array = new int3 111, 222, 333 ; ParamsMethod1(array); /传递数组参数 ,7.5.2 参数数组(续),使用关键字params修饰的数组只能是一维数组。 一个方法只能有一个参数数组,而且此参数数组必须是方法定义中的最后一个参数。 参数数组必须是值参数,不能使用关键字ref或out修饰。 参

36、数数组是自动可选的,即可以不给参数数组传递任何参数。 关键字params不能用于区分重载方法。,7.5.2 参数数组(续),1. int Method(params int, array) /错误 int Method(params int array) /正确,交错数组是一维数组 2. int Method(params int array,int a) /错误 int Method(int a ,params int array) /正确 3. int Method(ref params int array) /错误 int Method(out params int array) /错误

37、 5. int Method(params int array) int Method(int array) /错误,7.5.3 Main方法和命令行参数,Main方法是C#应用程序的入口点。运行程序时可以从命令行给它传递参数。 Main方法的方法头可以是下列4种形式之一: static void Main() static int Main() static void Main(string args) static int Main(string args) 2.与4.返回0表示正常终止,非0表示非正常终止 3.与4.的参数数组args,可以接受命令行中的参数,7.5.3 Main方法和命

38、令行参数(续),命令行中的参数传递给Main方法后,保存在Main方法的字符串数组参数args中。其中,命令行中的第1个参数保存在args 0中;命令行中的第2个参数保存在args 1中;.;依此类推。 例7-9 使用命令行参数,源代码,运 行,例7-9 使用命令行参数,using System; public class CommandLine public static void Main(string args) Console.WriteLine(parameter count = 0, args.Length); foreach (string s in args) Console.

39、WriteLine(s); ,例7-9 在命令行运行,例7-9 在.Net环境的运行,例7-9 在.Net环境的运行,7.5.4 返回数组,数组也可以用作方法的返回值。从某一方法返回数组,实际返回的只是一个引用数组的引用。通过这个引用就可以操作相应的数组。 例7-10 返回数组,源代码,运 行,using System; public class ReturnArray public static void Main() int a1 = 10, 4, 2 ; int a2; for (int i = 0; i a1.Length; i+) Console.Write( a10=1, i, a

40、1i); Console.WriteLine(); a2 = CopyArray(a1); for (int i = 0; i a2.Length; i+) Console.Write( a20=1, i, a2i); Console.WriteLine(); public static int CopyArray(int la) int a = new intla.Length; for (int i = 0; i la.Length; i+) ai = lai; return a; ,7.6 Array类,Array类:提供一些方法,用于创建、处理、搜索数组并对数组进行排序,从而充当公共语

41、言运行时中所有数组的基类。 继承层次 System.Object System.Array 7.6.1 数组的复制 7.6.2 数组排序 7.6.3 在数组中查找,7.6.1 数组的复制,Array.Copy CopyTo 例7-11 数组的复制,源代码,运 行,7.6.1 数组的复制(续),第一个元素开始复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从第一个元素开始)。 长度指定为 32 位整数。 public static void Copy( Array sourceArray, Array destinationArray, int length ) 参数: so

42、urceArray 类型:System.ArrayArray,它包含要复制的数据。 destinationArray 类型:System.ArrayArray,它接收数据。 length 类型:System.Int32一个 32 位整数,它表示要复制的元素数目。,从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。 长度和索引指定为 32 位整数。 public static void Copy( Array sourceArray, int sourceIndex, Array destinationArray, int desti

43、nationIndex, int length ) 参数: sourceArray 类型:System.ArrayArray,它包含要复制的数据。 sourceIndex 类型:System.Int32一个 32 位整数,它表示 sourceArray 中复制开始处的索引。 destinationArray 类型:System.ArrayArray,它接收数据。 destinationIndex 类型:System.Int32一个 32 位整数,它表示 destinationArray 中存储开始处的索引。 length 类型:System.Int32一个 32 位整数,它表示要复制的元素数目

44、。,7.6.1 数组的复制(续),将当前一维 Array 的所有元素复制到指定的一维 Array 中(从指定的目标 Array 索引开始)。 索引指定为 32 位整数。 public void CopyTo( Array array, int index ) 参数: array 类型:System.Array一维 Array,它是从当前 Array 复制的元素的目标位置。 index 类型:System.Int32一个 32 位整数,它表示 array 中复制开始处的索引。,例7-11 数组的复制,using System; public class ArrayCopy public stat

45、ic void Main() int arr1=new int1,2,3,4,5; object arr2=new object10,20,30,40,50,60; Console.Write( Int32 array: ); PrintArray( arr1); Console.Write( Object array: ); PrintArray( arr2 ); Console.WriteLine();,Array.Copy( arr2, arr1, 3 ); Console.WriteLine( 现在Int32 array中前3个元素与Object array相同: ); Console

46、.Write( Int32 array: ); PrintArray( arr1); Console.Write( Object array: ); PrintArray( arr2 ); Console.WriteLine(); Array.Copy( arr1, arr1.Length-2, arr2, arr2.Length-2, 2 ); Console.WriteLine( 现在Object array中最后2个元素与Int32 array相同: ); Console.Write( Int32 array: ); PrintArray( arr1); Console.Write( O

47、bject array: ); PrintArray( arr2 ); Console.WriteLine();,arr1.CopyTo(arr2, arr2.Length - arr1.Length); Console.WriteLine(现在Object array中后面的元素与Int32 array对应相同:); Console.Write(Int32 array:); PrintArray(arr1); Console.Write(Object array:); PrintArray(arr2); public static void PrintArray(Array myArr) f

48、oreach (object i in myArr) Console.Write(t0, i); Console.WriteLine(); ,7.6.2 数组排序,Array.sort: 可以给一维数组中的全部或部分元素按从小到大的顺序排序。 排序依据的是数组元素实现的接口System.IComparable或特别给出的与之相关的实现了接口System.IComparer的类。,7.6.2 数组排序(续),接口IComparable和IComparer是比较对象大小的标准方式, 接口IComparable在要待比较的对象的类型中实现,用于比较当前对象与另一个对象;而接口IComparer在另一

49、个单独的类中实现,用于比较任意两个对象。 最常用的是接口IComparable,.NET框架预定义的许多类型都实现了该接口。比如,数值类型中,该接口被实现按数值大小进行比较。,7.6.2 数组排序(续),为了使某个类型具有默认的比较能力,应该实现接口System.IComparable。 接口IComparable中只有一个方法CompareTo,该方法有一个Object型参数,当这个参数大于该方法所属的对象时返回负整数,等于该方法所属的对象时返回0,小于该方法所属的对象时返回正整数。 例7-12 数组的排序,源代码,运 行,using System; class A : IComparabl

50、e int i, j; public A(int a1, int a2) i = a1; j = a2; public int CompareTo(Object obj) int k = (A)obj).i; if (k i) return -1; else if (k i) return 1; else return 0; public override String ToString() return ( + i + , + j + ); ,public class ArraySort public static void Main() int a1=5,2,6,4,3,8,1,7; Co

51、nsole.WriteLine(排序前:); PrintArray(a1); Array.Sort(a1,0,3); Console.WriteLine(位置02的元素排序后:); PrintArray(a1); Array.Sort(a1); Console.WriteLine(全部排序后:); PrintArray(a1);,A a2 = new A(5, 2), new A(2, 3), new A(3, 1) ; Console.WriteLine(排序前:); PrintArray(a2); Array.Sort(a2); Console.WriteLine(排序后:); Print

52、Array(a2); public static void PrintArray(Array myArr) foreach (object i in myArr) Console.Write(0t, i); Console.WriteLine(); ,7.6.2 数组排序(续),比较两个对象的大小: 实现了接口IComparable的同类对象可以调用方法CompareTo比较大小。 例7-13 对象的比较,源代码,运 行,using System; class A : IComparable int i, j; public A(int a1, int a2) i = a1; j = a2;

53、public int CompareTo(Object obj) int k = (A)obj).j; if (k j) return -1; else if (k j) return 1; else return 0; public override String ToString() return ( + i + , + j + ); ,public class ObjectCompare public static void Main() A a1 = new A(2, 4); A a2 = new A(5, 3); if (a1.CompareTo(a2) 0) Console.WriteLine(01, a1, a2); else if (a1.CompareTo(a2) 0) Console.WriteLine(01, a1, a2); else Console.WriteLine(0=1, a1, a2); ,7.6.3 在数组中查找,Array.BinarySearch: 在一个一维数组中查找某个元素。如果查找到了目标元素,返回数组中目标元素的索引值;否则,返回一个负整数。查找时,比较的依据是数组元素和待查对象所实现的接口IComparable或特别给出的与之相关的实现了接口IComparer的类。查找前,待查数组必须已经相应地依

温馨提示

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

评论

0/150

提交评论