第5章数组在实际应用中,经常需要处理具有相同性质的一批数据。为此,在Java中还引入了数组,即用一个变量表示一组相同性质的数据。5.1一维数组5.2多维数组5.3数组的基本操作5.4数组应用举例5.5数组参数5.6字符串5.1一维数组数组是用一个变量名表示一组数据,每个数据称为数组元素,每个元素通过下标来区分。如果用一个下标能确定数组中的不同元素,这种数组称为一维数组。1一维数组的声明一维数组声明的格式为:类型标识符数组名[]或类型标识符[]数组名类型标识符指定每个元素的数据类型。例如,要表示学生的成绩(整数),可以声明数组score:intscore[];该声明表示数组的名字为score,每个元素为整数。要表示学生的体重(浮点数),可以声明元素的数据类型为float的数组weight,其声明如下:float[]weight;2一维数组的初始化要让系统为数组分配存储空间,必须指出数组元素的个数,该工作在数组初始化时进行。用new初始化数组先声明数组再初始化数组名=new类型标识符[元素个数]元素个数通过整型常量来表示。要表示10个学生的成绩(整数),可以先声明元素的数据类型为int的数组score,再用new运算符初始化该数组。intscore[];score=newint[10];数组中各元素通过下标来区分,下标的最小值为0,最大值比元素个数少1。score的10个元素分别为score[0],score[1],score[2],score[3],…,score[9]。系统为该数组的10个元素分配存储空间,形式如下表所示:score[0]score[1]score[2]score[3]score[4]score[5]score[6]score[7]score[8]score[9]例:要计算100个学生的平均成绩,可以使用以下的程序段:floatsum;inti;intscore[];score=newint[100];/*输入数组各元素的值*/sum=0;for(i=0;i100;i++)sum=sum+score[i];sum=sum/100;声明的同时进行初始化可以用1条语句声明并初始化数组,即将上面的2条语句合并为一条语句。其格式如下:类型标识符数组名[]=new类型标识符[元素个数]或类型标识符[]数组名=new类型标识符[元素个数]例如,要表示10个学生的学号,可以按以下方式声明并初始化数组no:intno[]=newint[10];赋初值初始化数组可以在声明数组的同时,给数组元素赋初值。所赋初值的个数决定数组元素的数目。其格式如下:类型标识符数组名[]={初值表}初值表是用逗号隔开的初始值。例如:intscore[]={65,34,78,81,56,92,56,87,90,77};score[0]score[1]score[2]score[3]score[4]score[5]score[6]score[7]score[8]score[9]653478815692568790775.2多维数组1二维数组的声明二维数组的声明方式与一维数组类似,只是要给出两对方括号。二维数组声明形式如下:类型标识符数组名[][]或类型标识符[][]数组名例如,要表示每个数据为整型数的行列式,可以声明如下二维数组:inta[][];2二维数组的初始化用new初始化二维数组先声明数组再初始化数组名=new类型标识符[行数][列数]例如:inta[][];a=newint[3][4];声明的同时进行初始化类型标识符数组名[][]=new类型标识符[行数][列数]或类型标识符[][]数组名=new类型标识符[行数][列数]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[2][3]。系统为该数组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]赋初值初始化数组其格式如下:类型标识符数组名[][]={{初值表},{初值表},…,{初值表}}intgrade[][]={{65,34,78},{81,56,92},{56,87,90},{92,69,75}};数组grade共有12个元素,元素grade[0][0],grade[0][1],grade[0][2],grade[1][0],…,grade[3][2]的初始值分别为65,34,78,…,75,如表所示:grade[0][0]65grade[0][1]34grade[0][2]78grade[1][0]81grade[1][1]56grade[1][2]92grade[2][0]56grade[2][1]87grade[2][2]90grade[3][0]92grade[3][1]69grade[3][2]755.3数组的基本操作数组的引用对数组的应用通常是对其元素的引用。intage[]=newint[3];age[0]=25;age[2]=2+age[0];数组的复制inta[]=newint[6];intb[]={1,2,3,4,5,6};for(inti=0;i6;i++)a[i]=b[i];或a=b;例--数组复制intc[][],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;数组的输出数组的输出通常是逐个元素结合循环语句实现的。inta[]=newint[6];for(inti=0;i6;i++){a[i]=i;System.out.println(a[i]);}例--一维数组的复制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;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=3012例--二维数组的复制classArrayC2{publicstaticvoidmain(String[]args){intc[][],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();}}}程序运行结果如下:Arrayd012123234Arrayc0121232345.4数组应用举例例排序排序是将一组数按照递增或递减的顺序排列。排序的方法很多,其中最基本的是选择法。此处介绍选择法排序,其基本思想如下:①对于给定的n个数,从中选出最小(大)的数,与第1个数交换位置,便将最小(大)的数置于第1个位置。②对于除第1个数外的剩下的n-1个数,重复步骤1,将次小(大)的数置于第2个位置。③对于剩下的n-2,n-3,…,n-n+2个数用同样的方法,分别将第3个最小(大)数置于第3位置,第4个最小(大)数置于第4位置,…,第n-1个最小(大)数置于第n-1位置。假定有7个数,7,4,0,6,2,5,1,根据该思想,对其按照递增顺序排列,需要进行6轮选择和交换过程:第1轮:7个数中,最小数是0,与第1个数7交换位置,结果为:0476251第2轮:剩下的6个数中,最小数是1,与第2个数4交换位置,结果为:0176254第3轮:剩下的5个数中,最小数是2,与第3个数7交换位置,结果为:0126754第4轮:剩下的4个数中,最小数是4,与第4个数6交换位置,结果为:0124756第5轮:剩下的3个数中,最小数是5,与第5个数7交换位置,结果为:0124576第6轮:剩下的2个数中,最小数是6,与第6个数7交换位置,结果为:0124567可见,对于n个待排序的数,要进行n-1轮的选择和交换过程。其中第i轮的选择和交换过程中,要进行n-i次的比较,方能选择出该轮中最小(大)的数。importjava.io.*;classArraySort{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderkeyin=newBufferedReader(newInputStreamReader(System.in));inta[],i,j,k,temp;Stringc;System.out.println(Inputthenumberofarrayelements!);例--排序例排序(续)c=keyin.readLine();temp=Integer.parseInt(c);a=newint[temp];System.out.println(Input+temp+numbers.Oneperline!);for(i=0;ia.length;i++){c=keyin.readLine();a[i]=Integer.parseInt(c);}System.out.println(Aftersorting!);for(i=0;ia.length-1;i++){k=i;for(j=i+1;ja.length;j++)if(a[j]a[k])k=j;temp=a[i];a[i]=a[k];a[k]=temp;}for(i=0;ia.length;i++)System.out.println(a[i]);}例--矩阵运算数学中的矩阵在Java中用二维数组实现,本例中要进行矩阵的加、乘运算。classArrayC3{publicstaticvoidmain(String[]args){intc[][]={{1,2,3},{4,5,6},{7,8,9}};intd[][]={{2,2,2},{1,1,1},{3,3,3}};inti,j,k;inte[][]=newint[3][3];System.ou