第四章数组︳Java程序设计vcclab@qq.com数组本章学习提示本章的重点是介绍Java中数组类的使用,包括:数组的创建和使用数组类和字符串类的常用方法习惯Java完全面向对象的编程方式HefeiUniversityofTechnology,SchoolofComputerandInformationPage3/38Chapter4数组目录数组&数组创建1数组的排序32多维数组字符串4HefeiUniversityofTechnology,SchoolofComputerandInformationPage4/38Chapter4数组数组数组是程序设计使用最频繁的数据结构,它用来表示一组类型相同的有序数据。这些数据使用同一个标识符命名叫数组名,数组中的每个数据叫数组元素,可通过下标来访问。和变量一样,数组必须先定义,后使用。定义数组时确定数组的名称、数据类型,还要为它分配内存,初始化。在Java中,数组是对象。类Object中定义的方法都可以用于数组对象。基本类型,类类型,数组等。HefeiUniversityofTechnology,SchoolofComputerandInformationPage5/38Chapter4数组一维数组的初始化声明一个数组仅为数组指定了数组名和元素的数据类型,并未指定数组元素的个数,系统无法为数组分配存储空间。声明后的数组由初始化来完成上述工作,经过初始化的数组才能引用。数组初始化可以通过new操作符完成,也可以通过给元素赋初值完成。HefeiUniversityofTechnology,SchoolofComputerandInformationPage6/38Chapter4数组创建数组静态初始化和动态初始化静态初始化:在定义数组的同时对数组元素进行初始化静态初始化可用于任何元素类型,初值块中每个位置的每个元素对应一个引用(reference)intintArray[]={1,2,3,4};float[]heights={84.124,78.2,61.5};boolean[]tired={true,false,false,true};String[]names={“Zhang,“Li,“Wang};HefeiUniversityofTechnology,SchoolofComputerandInformationPage7/38Chapter4数组创建数组静态初始化和动态初始化动态初始化是使用运算符new为数组分配空间。数组说明的方括号中的数字表示数组元素个数:type[]arrayName=newtype[arraySize]typearrayName[]=newtype[arraySize]s=newchar[20];HefeiUniversityofTechnology,SchoolofComputerandInformationPage8/38Chapter4数组一维数组初始化示例第一种形式intscore[];score=newint[10];第二种形式intscore[]=newint[10];第三种形式intscore[]={65,34,78,81,56,92,56,87,90,77};Java数组的下标最小值为0,最大值为元素个数减一。S[9]S[8]S[7]S[6]S[5]S[4]S[3]S[2]S[1]S[0]65347881569256879077HefeiUniversityofTechnology,SchoolofComputerandInformationPage9/38Chapter4数组实战编写“复制一维数组的程序”定义两个一维数组a[3]和b[5]赋值a[i]=i;赋值b[j]=10*j;将a[i]逐位复制给b[i]HefeiUniversityofTechnology,SchoolofComputerandInformationPage10/38Chapter4数组一维数组的复制1.//1ArrayCopy2.//一维数组的复制3.packagechapter4;4.classexample04_01{5.publicstaticvoidmain(Stringargs[]){6.inta[],b[],i,j;7.a=newint[3];8.b=newint[5];9.System.out.println(a.length=+a.length);10.for(i=0;ia.length;i++){11.a[i]=i;12.System.out.print(a[i]+);13.}14.System.out.println();15.System.out.println(Beforearrayassigment);16.System.out.println(b.length=+b.length);17.for(j=0;jb.length;j++){18.b[j]=j*10;19.System.out.print(b[j]+);20.}21.System.out.println();22.b=a;23.System.out.println(Afterarrayassigment);System.out.println(b.length=+b.length);24.for(j=0;jb.length;j++)25.System.out.print(b[j]+);26.System.out.println();27.}28.}HefeiUniversityofTechnology,SchoolofComputerandInformationPage11/38Chapter4数组复合类型的数组复合类型的数组需要经过两步进行空间分配使用运算符new只是为数组本身分配空间,并没有对数组的元素进行初始化第一步先创建数组本身:typearrayName[]=newtype[arraySize];第二步分别创建各个数组元素:arrayName[0]=newtype(paramList);…arrayName[arraySize-1]=newtype(paramList);stringstringArrar[];stringArray=newString[3];stringArray[0]=newString(“how”);stringArray[1]=newString(“are”);HefeiUniversityofTechnology,SchoolofComputerandInformationPage12/38Chapter4数组目录数组&数组创建1数组的排序32多维数组字符串4HefeiUniversityofTechnology,SchoolofComputerandInformationPage13/38Chapter4数组多维数组Java中没有真正的多维数组,可以建立数组的数组(的数组……),由此得到多维数组。例如数组元素为一维数组时,称为二维数组,数组元素为二维数组时成为三维数组等等,依次类推。多维数组需要有多个下标来确定,拿二维数组为例,二维数组相当一个具有行列的表,只要给出表的行号和列号就可以确定表中的元素。二维数组的声明类型标识符数组名[][]或类型标识符[][]数组名HefeiUniversityofTechnology,SchoolofComputerandInformationPage14/38Chapter4数组二维数组的初始化声明的目的是指定数组名和元素的数据类型,初始化的目的是指定数组的行数与列数,为数组分配内存,给元素赋初值一般由赋值语句完成,也可以在初始化时通过初值表,同时完成赋初值的工作。1.先声明数组再初始化类型标识符数组名[][]数组名=new类型标识符[行数][列数]2.声明的同时进行初始化类型标识符数组名[][]=new类型标识符[行数][列数]或类型标识符[][]数组名=new类型标识符[行数][列数]3.赋初值初始化数组类型标识符数组名[][]={{初值表},{初值表},…{初值表}}HefeiUniversityofTechnology,SchoolofComputerandInformationPage15/38Chapter4数组二维数组的初始化二维数组行列数的检测也是通过属性length进行的,不同的是测列数时需要给定一个行标。具体办法为获得行数数组名.length获得列数数组名[行标].length二维数组初始化示例第一种方式inta[][];a=newint[3][4];第二种方式inta[][]=newint[3][4]第三种方式intgrade[][]={{65,34},{81,56,92},{56,87,90},{92,69,75}};数组的引用方法是在数组名后面的括号中指定其下标,通过下标值的变换,可取得相应数组元素的值。HefeiUniversityofTechnology,SchoolofComputerandInformationPage16/38Chapter4数组二维数组之例1.Strings[][]=newString[2][];2.s[0]=newString[2];3.s[1]=newString[3];4.s[0][0]=newString(“Good”);5.s[0][1]=newString(“Luck”);6.s[1][0]=newString(“to”);7.s[1][1]=newString(“you”);8.s[1][2]=newString(“!”);HefeiUniversityofTechnology,SchoolofComputerandInformationPage17/38Chapter4数组二维数组之例1.intmyTable[][]={2.{23,45,65,34,21,67,78},3.{46,14,18,46,98,63,88},4.{98,81,64,90,21,14,23},5.{54,43,55,76,22,43,33}};6.for(introw=0;row4;row++){7.for(intcol=0;col7;col++)8.System.out.print(myTable[row][col]+);9.System.out.println();10.}0123456023456534216778146141846986388298816490211423354435576224333HefeiUniversityofTechnology,SchoolofComputerandInformationPage18/38Chapter4数组非矩阵数组1.inttwoDim[][]=newint[4][];2.twoDim[0]=newint[2];3.twoDim[1]=newint[4];4.twoDim[2]=newint[6];5.twoDim[3]=newint[8];XXXXXXXXXXXXXXXXXXXXtwoDim数组为4行,每行的元素个数分别为2,4,6,8个HefeiUniversityofTechnology,SchoolofComputerandInformationPage19/38Chapter4数组二维数组的复制1.//ArrayCopy2.//二维数组的复制3.packagechapter4;4.publicclassexample04_02{5.publicstaticvoidmain(Stringargs[]){6.intc[][],d[][],i,j;7.c=newint[2][2];8.d=newint[3][3];9