您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Java面向对象程序设计--第3章JAVA数组和方法
第三章JAVA数组和方法主要内容:数组数组声明数组创建数组使用方法方法的定义方法的调用数组是一种最简单的复合数据类型。数组是一组同类型有序数据的集合,数组中的一个数据成员称为数组元素,数组元素可以用一个统一的数组名和下标(序号)来唯一确定。根据数组下标是一个还是多个,数组分为一维数组和多维数组。3.1.1数组的概念•一维数组中的各个元素排成一行,通过数组名和一个下标就能访问一维数组中的元素。•3.1.1一维数组的定义•数组的定义包括数组声明和为数组分配空间、初始化(创建数组)等内容,必要时,还要为数组元素分配空间或初始化。3.1.2一维数组•声明一个一维数组的一般形式为:类型数组名[];或类型[]数组名;•其中,类型可以是Java中任意的基本数据类型或引用类型,数组名是一个合法的标识符,[]指明该变量是一个数组变量。例如:–intintArray[];(或int[]intArray;)–doubledecArray[];(或double[]decArray;)–StringstrArray[];(或String[]strArray;)–Buttonbtn[];(或Button[]btn;)1.一维数组的声明•说明:•与其他高级语言不同,Java在数组声明时并不为数组分配存储空间,因此,在声明的[]中不能指出数组中元素的个数(数组长度),而且对于如上声明的数组是不能访问它的任何元素的,必须经过初始化、分配存储空间创建数组后,才能访问数组的元素。当仅有数组声明,而未分配存储空间时,数组变量中只是一个值为null的空引用(指针)。•2.一维数组的空间分配•为数组分配空间有两种方法:数组初始化和使用new运算符。为数组分配空间后,数组变量中存储为数组存储空间的引用地址。•(1)数组初始化•数组初始化是指在声明数组的同时指定数组元素的初始值。一维数组初始化的形式如下:–类型数组名[]={元素1[,元素2…]}•其中元素为指定类型的初始值。基本类型和字符串类型等可以用这种方式创建数组空间。例如:–intintArray[]={1,2,3,4,5};–doubledecArray[]={1.1,2.2,3.3};–StringstrArray[]={Java,BASIC,FORTRAN};•从上述例子可以看到,一维数组的初始化即在前面数组声明的基础上在大括号中给出数组元素的初值,系统将自动按照所给初值的个数计算出数组的长度并分配相应的存储空间。•(2)使用new运算符•通过使用new运算符可为数组分配存储空间和指定初值。若数组已经声明,为已声明数组分配空间的一般形式如下:–数组名=new类型[数组大小];•其中,数组名是已声明的数组变量,类型是数组元素的类型,数组大小是数组的长度,可以为整型常量或变量。通过数组运算符new并给定个数为数组分配指定数组大小的空间。•若数组未声明,则可在数组声明的同时用new运算符为数组分配空间:–类型数组名[]=new类型[数组大小];•3.复合类型数组元素的动态空间分配和初始化•一般情况下,复合类型的数组需要进一步对数组元素用new运算符分配空间分配并初始化操作。设已声明一个复合类型的数组arrayName:–类型arrayName[];•对数组arrayName的动态空间分配步骤如下:•(1)为数组分配每个元素的引用空间:–arrayName=new类型[数组大小];•(2)为每个数组元素分配空间:–arrayName[0]=new类型(paramList参数表);–…–arrayName[数组大小-1]=new类型(paramList参数表);•其中paramList参数表用于数组元素初值的指定。•例如,下面是一个图形界面应用程序中所用按钮数组的定义:Buttonbtn[];btn=newButton[2];btn[0]=newButton(确定);btn[1]=newButton(退出);•当然,在比较简单的情况下,上述操作可简化为:Buttonbtn[]={newButton(确定),newButton(退出)};•3.1.3一维数组的引用•一维数组的引用分为数组元素的引用和数组的引用,大部分时候都是数组元素的引用。一维数组元素的引用方式为:–数组名[下标]•其中:下标是int类型的,也可以是byte、short、char等类型,但不允许为long类型。下标的取值从0开始,直到数组的长度减1。一维数组元素的引用与同类型的变量相同,每一个数组元素都可以用在同类变量被使用的地方。对前面建立的数组变量intArray,有5个数组元素,通过使用不同的下标来引用不同的数组元素intArray[0]、intArray[1]、...、intArray[4]。•Java对数组元素要进行越界检查以保证安全性。若数组元素下标小于0、大于或等于数组长度将产生下面的异常:–ArrayIndexOutOfBoundsException。•Java语言对于每个数组都有一个指明数组长度的属性length,它与数组的类型无关。例如intArray.length等。•对一维数组元素的逐个处理,一般用循环结构的程序。•【例3.1】设数组a中存有10个学生某门课程的成绩,输出这10个学生的成绩与平均成绩的差(低于平均成绩用负数表示)。publicclassScore{publicstaticvoidmain(Stringargs[]){inta[]={90,87,67,83,88,94,76,98,95,72},i,sum=0;doubleave;for(i=0;ia.length;i++){sum+=a[i];}ave=sum/10.0;System.out.println(Average=+ave);for(ints:a){System.out.printf(%4d,s);}System.out.println();for(ints:a){System.out.printf(%4d,(s-(int)ave));}}}•程序运行结果如下:Average=85.09087678388947698957252-18-239-91310-13•在上述程序中,对数组的元素逐个访问使用了for-each格式的循环语句。注意语句中的变量s应与数组的类型相同,它代表数组元素,而不是数组的下标。【例3.2】输入10个整数,按相反的顺序输出它们。importjava.util.Scanner;publicclassNumberInput{publicstaticvoidmain(Stringargs[]){Scannersc=newScanner(System.in);inti,a[]=newint[10];for(i=0;ia.length;i++){System.out.print(请输入第+(i+1)+个数:);a[i]=sc.nextInt();}for(i=a.length-1;i=0;i--)System.out.println(反序+(a.length-i)+:+a[i]);}}•有时候需要将不同基本类型的数据组织到一个数组中,在Java这种面向对象的语言中,实现起来是很容易的。在第2章中已经介绍过与基本类型相应的包装类,在Java语言中,所有的类都是类Object的子类,因此可以定义类Object的数组,也就可以将不同基本类型的数据存入到一个数组。•【例3.3】类Object的数组。classObjectArray{publicstaticvoidmain(Stringargs[]){Objecta[]=newObject[5];a[0]=newInteger(3);a[1]=newString(张三);a[2]=newBoolean(true);a[3]=newCharacter('F');a[4]=newDouble(1345.68);System.out.println(编号姓名已婚性别工资);for(Objects:a)System.out.print(+s+);System.out.println();}}•程序运行结果如下:–编号姓名已婚性别工资–3张三trueF1345.68•当数组创建后,数组名中就存储为数组存储区的首地址(即一种引用),可以将此地址赋值给另一同类型的数组,即数组的引用。•【例3.4】数组的赋值和引用。publicclassRefDemo{publicstaticvoidmain(String[]args){int[]a={1,2,3},b;b=a;for(ints:b)System.out.print(s+);System.out.println();}}•Java也支持多维数组。在Java语言中,多维数组被看作数组的数组。例如二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。下面的讨论主要针对二维数组,更高维数的数组情况类似于二维数组。•使用二维数组可方便地处理表格形式的数据。3.1.4多维数组3.1.4.1二维数组的定义二维数组的定义与一维数组类似,包括数组声明、为数组和数组元素分配空间、初始化等内容。•1.二维数组的声明•声明二维数组的一般形式为:–类型数组名[][];–或类型[][]数组名;–或类型[]数组名[];•数组声明中的类型,可以是简单类型,也可以是复合类型。•2.二维数组的空间分配•(1)二维数组的初始化•二维数组的初始化也是在声明数组的同时就为数组元素指定初值。例如:–intintArray[][]={{1,2},{3,4},{5,6,7}};•Java系统将根据初始化时给出的初始值的个数自动计算出数组每一维的大小。在这个例子中,二维数组intArray由三个一维数组组成,这三个一维数组的元素个数分别为2、2、3。在Java语言中,由于把二维数组看作是数组的数组,数组空间不一定连续分配,所以不要求二维数组每一维的大小相同。•3.1.4.2二维数组的引用•大多数情况是引用二维数组的元素。对二维数组中的每个元素,引用方式为:–数组名[下标1][下标2]•其中,下标1和下标2可用类型同一维数组,如c[2][3]等。同样,每一维的下标都从0开始。•对二维数组元素的逐个处理,一般用嵌套循环结构的程序。•【例3.5】矩阵转置。矩阵是排列成若干行若干列的数据表,转置是将数据表的行列互换。即第一行变成第一列、第二行变成第二列等等。–publicclassMatrixt{–publicstaticvoidmain(Stringargs[]){–inta[][]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};–intb[][]=newint[4][3];inti,j;for(i=0;i3;i++)for(j=0;j4;j++)b[j][i]=a[i][j];for(i=0;i4;i++){for(ints:b[i])System.out.print(s+);System.out.println();}}}•程序运行结果如下:–123–234–345–456•输出为4行3列的矩阵,即已经进行了行和列的互换。•在Java语言中,数组可用为方法参数和方法的返回值。因为数组是复合类型,数组变量存储的是数组存储区的引用,所以,传送数组或返回数组实际上在传送引用。在这个意义上来说,即使实际参数和形式参数数组变量名不同,但因为它们是相同的引用,若在被调方法中,改变了形参数组,则该形参对应的实参数组也将发生变化。3.1.5数组作为方法参数和返回值•【例3.6】数组作为方法参数。classArrayArgument{publicstaticvoidmain(Stringargs[]){intx[]={11,12,13,14,15};display(x);change(x);display(x);}publicstaticvoidchange(intx[]){for(inti=0;ix.length;i++)x[i]=x[i]+10;}publics
本文标题:Java面向对象程序设计--第3章JAVA数组和方法
链接地址:https://www.777doc.com/doc-2881646 .html