浙江大学Java程序设计课程PPT第五章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第五章数组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=weigth.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次),若前一个数大于后一个数,则进行对调

1 / 49
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功