第五章数组5.1一维数组5.2多维数组5.3数组的基本操作5.4数组应用举例5.5数组参数5.6字符串Introduction数组,Array(阵列)变量:存储单个数据数组:存储多个数据具有相同性质的一批数据Java数组:用一个变量表示一组相同类型的数据ForExample一组n个学生的成绩数据处理输入输出排序求最大求平均值判断不及格统计分数段……给每一个学生的成绩数据设定一个变量?NO!5.1一维数组数组一个变量名表示一组数据,每个数据称为数组元素每个元素通过下标来区分一维数组以一个下标确定数组中的不同元素多维数组多个下标表示一个数组元素数组必须先经过申明和初始化后才能使用数组申明:确定数组名、数组的维数和数组元素的数据类型一维数组的声明一维数组声明的格式类型标识符数组名[]或类型标识符[]数组名例:表示学生的成绩(整数),可以声明数组score:intscore[];表示体重的数组类型为float的weight,声明:float[]weight;Note:方括号可以在变量名的后面,也可以在类型名后面一维数组的初始化数组初始化系统为数组分配存储空间,确定数组元素的个数用new初始化数组数组名=new类型标识符[元素个数]先声明数组再初始化intsc[];sc=newint[10];float[]weight;weight=newfloat[50]数组元素通过下标来区分下标最小值为0下标最大值为元素个数减1各元素的存储空间是连续的sc[0]sc[1]sc[2]sc[3]sc[4]sc[5]sc[6]sc[7]sc[8]sc[9]一维数组初始化在声明的同时进行初始化即将前述的声明语句、new语句合并为一条语句:类型标识符数组名[]=new类型标识符[元素个数]或类型标识符[]数组名=new类型标识符[元素个数]例如:intsc[]=newint[10];float[]weight=newfloat[50]初始化数组后,通过数组的length获取元素个数数组.length例如:n=sc.length;//n=10m=weight.length;//m=50赋初值初始化数组可以在声明数组的同时,给数组元素赋初值所赋初值的个数决定数组元素的数目其格式如下:类型标识符数组名[]={初值表}初值表是用逗号隔开的初始值,例如:intscore[]={65,34,78,81,56,92,56,87,90,77};65347881569256879077score[0]score[9]使用数组的好处减少程序中的变量数量统一的数组名,易于理解对数据元素的操作可以使用循环语句一维数组元素的赋值和输出都可以通过单重循环语句完成【例补5-10】输入10个学生的成绩,统计最高分,平均分、不及格人数及高于平均分的人数1.定义数组sc[10]用于存放10个学生成绩2.利用循环语句输入成绩并统计5.2多维数组二维数组的声明二维数组经常表示一个矩阵二维数组的声明方式与一维数组类似,只是要给出两对方括号。二维数组声明形式如下:类型标识符数组名[][]或类型标识符[][]数组名例如:inta[][];//第一个[]叫做行,第二个[]叫做列二维数组的初始化先声明数组再初始化用new初始化二维数组数组名=new类型标识符[行数][列数]例如:inta[][];a=newint[3][4];声明同时初始化类型标识符数组名[][]=new类型标识符[行数][列数]或类型标识符[][]数组名=new类型标识符[行数][列数]例如:inta[][]=newint[3][4];inta[][]=newint[3][4];数组中各元素通过两个下标来区分每个下标的最小值为0,最大值分别比行数或列数少1。系统为该数组a的12个元素分配存储空间,形式如表所示:a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]行列二维数组的初始化初始化后,通过属性length获取行数和列数获取数组行数:数组名.length例:a.length//值为3获取数组列数:数组名[行标].length例:a[0].length//值为3inta[][]=newint[3][4];Java中,二维数组作为一维数组来处理A可看作一维数组,有3个元素a[0]、a[1]、a[2]每个元素本身是一维数组,例:二维数组的初始化在初始化时,可以各行单独进行,允许各行元素不同、intc[][]=newint[3][];//c为3行二维数组c[0]=newint[1];//c[0]具有1个元素c[1]=newint[3];//c[1]具有3个元素c[2]=newint[5];//c[2]具有5个元素a[0][0]、a[0][1]、a[0][2]、a[0][3]赋初值初始化二维数组类型标识符数组名[][]={{初值表0},{初值表1},…,{初值表n}};例:intgd[][]={{65,34,78},{81,56,92},{56,87,90},{92,69,75}};//gd共有12个元素,元素gd[0][0],gd[0][1],gd[0][2],gd[1][0],…,gd[3][2]的初始值分别为65,34,78,…,75,如表所示gd[0][0]65gd[0][1]34gd[0][2]78gd[1][0]81gd[1][1]56gd[1][2]92gd[2][0]56gd[2][1]87gd[2][2]90gd[3][0]92gd[3][1]69gd[3][2]75注意:二维数组元素的赋值和输出可以通过双重循环语句完成5.3数组的基本操作数组的引用对数组的应用通常是对其元素的引用数组元素可以被赋值、被输出或参加表达式运算intage[]=newint[3];age[0]=25;age[2]=2+age[0];数组的复制可以通过循环语句也可以直接将一个数组赋值给另一数组inta[]=newint[6];//将b数组的各元素值赋值a数组的相应元素intb[]={1,2,3,4,5,6};for(inti=0;i6;i++)a[i]=b[i];或a=b;Demo1intc[][],d[][],e[][],i,j;c=newint[3][3];d=newint[3][3];e=newint[3][3];for(i=0;i3;i++)for(j=0;j3;j++){d[i][j]=i+j;c[i][j]=d[i][j];}e=d;c、d、e数组各元素012123234数组的基本操作数组的输出数组输出通常是逐个元素结合循环语句实现inta[]=newint[6];for(inti=0;i6;i++){a[i]=i;System.out.print(a[i]+””);}输出:012345例【5-2】一维数组的复制classArrayC{publicstaticvoidmain(String[]args){inta[],b[],i,j;a=newint[3];b=newint[5];System.out.println(a.length=+a.length);for(i=0;ia.length;i++){a[i]=i;System.out.print(a[i]+);}System.out.println();//作用?(接下页)System.out.println(Beforearrayassignment);System.out.println(b.length=+b.length);for(j=0;jb.length;j++){b[j]=j*10;System.out.print(b[j]+);}System.out.println();b=a;//注意,数组a、b长度不一样System.out.println(Afterarrayassignment);System.out.println(b.length=+b.length);for(j=0;jb.length;j++)System.out.print(b[j]+);System.out.println();}}a.length=3012Beforearrayassignmentb.length=5010203040Afterarrayassignmentb.length=3012intc[][],d[][],i,j;c=newint[2][2];d=newint[3][3];System.out.println(Arrayd:);for(i=0;id.length;i++){for(j=0;jd[i].length;j++){d[i][j]=i+j;System.out.print(d[i][j]+“);}System.out.println();}c=d;System.out.println(Arrayc:);for(i=0;ic.length;i++){for(j=0;jc[i].length;j++)System.out.print(c[i][j]+“);System.out.println();}例【5-3】二维数组的复制程序运行结果如下:Arrayd012123234Arrayc012123234//外循环控制行//内循环控制列5.4数组应用举例-排序【5-4】排序排序是将一组数按照递增或递减的顺序排列排序的方法很多,其中最基本的是选择法,基本思想:先在n个数中选最小数,放在第1个数组元素中。取第1个数,与后面n-1(即底2到第n)个数逐个比较。若第1个数大,则与数组元素中的值进行互换,…,直到最后。再在第2至第n个元素中,选最小数,放在第2个数组元素中。取第2个数,与后面n-2(即3到n)个数逐个比较。若第2个数大,则与数组元素中的值进行互换,…,直到最后。重复以上步骤,直至在最后两个数中选取最小数,放在第n-1个数组元素中。最后第n个元素已是最大数了。5.4数组应用举例-排序改进的选择法,基本思想:对于给定的n个数,找到最小数的位置,与第1个数交换最小数置于第1个位置(每一轮最多只做一次交换)对于剩下的n-1个数,重复步骤1,将次小数置于第2个位置对于剩下的n-2,n-3,…,最后2个数用同样的方法,分别将第3个最小数置于第3位置,第4个最小数置于第4位置,……,第n-1个最小数置于第n-1位置,最后第n个数已是最大数了。若7,4,0,6,2,5,1(放在数组元数a中)从小到大排序:1、7个数中,最小数是0,与第1个数7交换位置,结果为:04762512、余下的6个数最小数是1,与第2个数4交换,结果为:01762543、剩下的5个数最小数是2,与第3个数7交换,结果为:01267544、剩下的4个数最小数是4,与第4个数6交换,结果为:01247565、剩下的3个数最小数是5,与第5个数7交换,结果为:01245766、剩下的2个数是6,与数7交换,结果为0124567ForExample数组应用举例-排序对n个待排序的数,要进行n-1轮的选择和交换过程那么,在每轮中,如何确定最小数的位置?思路:第i轮最小数的位置position的确定position=i;对于i后面的每个数a[j]若a[position]a[j],position=j故第i轮的选择和交换过程中,要进行n-i次的比较for(i=1;in;i++){p=i;for(j=i+1;j=n;j++)if(a[p]a[j])p=j;temp=a[i];a[i]=a[p];a[p]=temp;}5.4数组应用举例-排序另一种排序法-冒泡法,基本思想:从数组元素a(0)到a(n-1),将相邻的两个数两两进行比较(共比较n-1次),若前一个数大于后一个数,则进行对调