您好,欢迎访问三七文档
全国高职高专计算机技能型人才培养系列规划教材第3章数组主要内容3.1一维数组3.2多维数组概述数组是一组具有相同类型的有序数据的集合。数组中的一个数据成员称为数组元素,每个数组元素用相同的数组名和不同的下标来唯一确定,每个数组元素是一个变量,可以用来保存数据,所以数组是有序变量的集合。java中数组的元素类型可以是简单的数据类型,也可以是类类型。一个数组的创建一般需要三个步骤:1.数组的声明数组元素类型数组名[];或数组元素类型[]数组名;2.创建数组空间数组名=new数组元素类型[数组长度];3.初始化数组初始化数组就是要使数组中的各个元素有确定的数值。3.1一维数组一维数组的声明数据类型数组名[];或数据类型[]数组名;数据类型指明数组元素的数据类型,可以是Java中的任意数据类型;数组名是一个合法的标识符;[]表示定义的变量是一个数组变量,并且是一维的。例如:inta[];(或int[]a;)//声明一个一维整型的数组acharb[];(或char[]b;)//声明一个一维字符型的数组bdoublec[];(或double[]c;)//声明一个一维双精度实型的数组c若数组的类型一样,可以一次定义多个数组,如:intx[],y[],z[];或int[]x,y,z;注意:Java在对数组进行声明时,并不会为数组分配存储空间。因此,数组声明时,是不指明长度的,而且声明后的数组,必须要通过分配存储空间来创建数组对象后,才可以访问数组中的元素。在仅有数组的声明时,数组变量只是一个空指针(null)。一维数组的声明一维数组的空间分配为数组分配存储空间的方法有两种:(1)用new分配内存;(2)通过初始化分配内存。1.用new分配内存数组名=new数据类型[size];size指明数组的长度,例如:inta[]=newint[5];charb[]=newchar[10];doublec[]=newdouble[3];整型数组a的长度为5,即有5个整型数组元素:a[0]、a[1]、a[2]、a[3]、a[4],每一个元素都可以存放一个整型的数据,相当于5个整型变量。当用new关键字为一个数组分配内存空间后,系统将为每个数组元素都赋予一个初值,这个初值取决于数组的类型。数值型数组元素的初值为0,字符型数组元素的初值为一个不可见的控制符(\u0000),布尔型数组元素的初值为false,字符串数组和所有其他对象数组在创建时元素的初值为null。实际应用中,用户可根据具体情况来对数组元素重新赋值。一维数组的空间分配注意:当数组的存储空间分配以后,数组的长度就固定下来不能变化,除非用new运算符重新分配空间。new运算符为数组分配的空间是动态的,因此可以随时为数组重新分配空间,但是该数组原来存储的数据将丢失。如:inta[]={3,5,9};a=newint[10];//此时a数组中存储的数据3,5,9将丢失2.数组初始化分配内存数组初始化就是为数组元素指定初始值,同时为数组分配相应的内存空间。格式:类型名数组名[]={表达式1[,表达式2,表达式3,……]}一维数组的空间分配例如:inta[]={1,2,3,4};上述语句声明并创建了数组a,并且为数组中的每个元素赋值,使得a[0]=1,a[1]=2,a[2]=3,a[3]=4。系统将根据所给初值的个数计算出数组的长度并分配相应的存储空间,因此a数组的长度为4。注意:“{}”里的每一个表达式值的数据类型必须是相同的。不要再指定长度了。一维数组的空间分配3.复合类型数组元素分配内存空间(类类型)复合类型数组分配内存空间时,还需对每个数组元素再进行空间分配,如:Strings[];s=newString[3];s[0]=newString(“java”);//为第一个元素分配空间s[1]=newString(“program”);//为第二个元素分配空间s[2]=newString(“test”);//为第三个元素分配空间一维数组的空间分配一维数组的使用(1)数组元素的使用数组在分配好内存空间后,就可以在程序中像普通数据类型的变量一样使用,即可以在任何允许使用变量的地方使用数组元素。数组元素的识别方式为:数组名[下标]下标为非负的整型常数或表达式,数据类型只能是byte,char,short或int。注意:数组的下标是从0开始,到数组长度减1。例:元素的赋值与输出。classArray{publicstaticvoidmain(String[]args){inta[]=newint[5];//声明数组并进行存储空间的分配System.out.println(“a数组的长度为:”+a.length);//输出数组的长度for(inti=0;ia.length;i++){a[i]=i;//对数组元素进行初始化System.out.println(“a[“+i+”]=”+a[i]);//输出每个元素}}}程序的运行结果为:a数组的长度为:5a[0]=0a[1]=1a[2]=2a[3]=3a[4]=4例:Fibonacci数列的前10个数存入一个数组中,并倒序输出Fibonacci数列:1,1,2,3,5,8,13,21,……可以看出规律为:前两个元素的值都为1,从第三个元素开始其值为前两个元素值之和;根据Fibonacci数列的性质,先依次求出数列中的每一个元素,并逐个存入数组中;利用数组的length属性,将数列倒序输出。classFibonacci{publicstaticvoidmain(String[]args){intf[]=newint[11];//声明数组并进行存储空间的分配f[1]=1;f[2]=1;//对前两个数列元素进行初始化for(inti=3;if.length;i++){f[i]=f[i-1]+f[i-2];//求出第3个到第10个元素的值}for(intj=f.length-1;j0;j--){System.out.print(“”+f[j]);//输出每个元素}System.out.println();}}程序的运行结果为:55342113853211注意:此处定义了一个长度为11的数组,使用时下标是从1开始到10,没有使用f[0],这样数组的下标就和数列的序号相同,符合人们的使用习惯。(2)数组的使用当数组创建后,数组名就存储了数组存储空间的起始地址,也可以使用这个数组名给其他的同类数组名赋值,这样使得多个数组共享一组内存空间和数据。如下图所示:如:inta[]=newint[3];int[]b,c;b=c=a;new分配的数组空间abc2000H2000H2000H2000H堆内存栈内存一维数组的使用例:数组的使用示例publicclassuseArray{publicstaticvoidmain(Stringargs[]){inta[]={0,1,2,3,4};intb[];b=a;for(intj=0;j=b.length-1;j++){b[j]=b[j]+1;System.out.print(“a[“+j+”]=”+a[j]+”,”);System.out.println(“b[“+j+”]=”+b[j]);}}}程序的运行结果为:a[0]=1,b[0]=1a[1]=2,b[1]=2a[2]=3,b[2]=3a[3]=4,b[3]=4a[4]=5,b[4]=5可见,当b数组发生变化时,a数组同时也发生变化,因为b数组获取的是a数组的地址,即a和b数组共用同一块内存空间。注意:若将语句b=a;改成a=b;则会发生编译错误,因为b数组没有被分配内存空间,不能引用。(3)类Object数组Java中所有的类,都有一个默认的父类Object类。有时需要将不同类型的数据存储到一个数组中,由于基本的数据类型都有相应的包装类,而所有的类都是Object类的子类。因此可以声明一个类Object数组,将不同类型的数据存储起来。一维数组的使用例:类Object数组的使用publicclassObjectArray{publicstaticvoidmain(Stringargs[]){Objecta[]=newObject[4];a[0]=newInteger(199901);a[1]=newString(“王平”);a[2]=newCharacter(‘M’);a[3]=newDouble(75.68);System.out.println(“学号姓名性别平均分”);for(inti=0;i4;i++)System.out.print(a[i]+”“);System.out.println();}}运行结果:学号姓名性别平均分199901王平M75.68数组作为方法的参数和返回值由于数组名就是该数组的首地址,因此传送数组和返回数组实际上是引用地址。即形参和实参共用同一存储空间,对形参数组的修改就是对实参数组的修改。例:编写一个方法,求一组数的最大值,最小值,平均值,然后将第一个数改为0。publicclassReturnArray{publicstaticvoidmain(Stringargs[]){doublea[]={4,6.5,7,9.2,13};inti;doubleb[]=ave(a);for(i=0;ib.length;i++)System.out.println(b[+i+]=+b[i]);for(i=0;ia.length;i++)System.out.println(a[+i+]=+a[i]);}staticdouble[]ave(doublec[]){doubles[]=newdouble[3];doublemax=c[0],min=c[0],sum=c[0];for(inti=1;ic.length;i++){if(maxc[i])max=c[i];if(minc[i])min=c[i];sum=sum+c[i];}s[0]=max;s[1]=min;s[2]=sum/c.length;c[0]=0;returns;}}主要内容3.1一维数组3.2多维数组3.2多维数组在Java中并不直接支持多维数组,多维数组被看成是一维数组的数组,例如,二维数组看作是特殊的一维数组,二维数组的每一个元素又是一个一维数组。下面主要以二维数组为例说明更多维数组的使用情况。利用二维数组可以更方便地处理表格形式的数据。二维数组的声明数据类型数组名[][];或数据类型[][]数组名;或数据类型[]数组名[];例如:inta[][];//声明一个二维整型的数组achar[][]b;//声明一个二维字符型的数组bdouble[]c[];//声明一个二维双精度实型的数组c注意:对二维数组的声明也不分配存储空间。二维数组的空间分配(1)用运算符new分配内存对二维数组用new分配空间有两种方法。方法1:直接为二维数组的每一维分配存储空间。数组名=new数据类型[size1][size2];size1指明数组第一维的长度,size2指明数组第二维的长度例如:inta[][];a=newint[5][6];//给数组a分配5行6列共30个整型数据空间String[]b[]=newString[2][3];//数组b分配2行3列6个String元素的数据空间方法2:从最高维开始,分别为每一维分配空间格式:数组名=new数据类型[size1][];数组名[0]=new数据类型[size20]数组名[1]=new数据类型[size21]例如:intarray[][]=newint[3][];array[0]=newint[3];array[1]=newint[4];array[2]=newint[8];二维数组的空间分配可见,此种定义方法得到的二维数组,数组空间不是连续分配的,所以低维的长度可以是不等长
本文标题:第03章-数组
链接地址:https://www.777doc.com/doc-7269376 .html