【教学课件】第4章数组.ppt
第4章 数组在编写程序时,经常需要处理大量的数据。若用前面讲到的变量来实现,需要定义多个变量,这是非常困难和不合理的,故需要一个有效的管理方式。包括Java语言在内的所有高级语言都提供了一个数据结构数组,因此可以用数组来管理数据。数组是相同数据类型的元素按顺序组成的一种复合数据类型。虽然组成数组的元素的是基本的数据类型,但在Java语言中,将数组看成是一个对象。在程序中数组的引入可以更有效地管理、处理数据。Java语言按数组的维数来分类,可分为一维数组和多维数组。4.1 一维数组一维数组是最简单的一种数组形式,是一种线性数据序列。要使用一维数组,需要定义、创建、初始化、应用等过程。4.1.1 一维数组的定义和创建1数组的定义数组的定义包括数组的名字、数组包含的元素的数据类型。定义一维数组有两种格式,如下:dataType arrayName;dataType arrayName;2数组的创建数组的定义只是声明了数组类型的变量,实际上数组在内存空间中并不存在。为了使用数组,必须用new操作符在内存中申请连续的空间来存放申请的数组变量。4.1.2 数组元素的使用数组中的每一个元素均有一个编号,用来将不同的数组元素区分开来。Java将这样的编号称为元素的下标。并且规定数组的下标从0开始。一维数组可以通过数组的下标来访问数组中的元素。当一维数组创建以后,例如:int intArray=new int6;/创建一个整型数组,并分配6个数组元素4.1.3 数组的初始化数组定义和创建后,一维数组的初始化有两种方式。一种是定义数组时直接赋给初值,例如:float floatArray=12f,23.4f,45f,4.5f;/定义、创建数组floatArray,并为其赋初值12f、23.4f、45f、4.5f 另一种是定义和创建一个数组后,通过下标为每个元素赋值,上例相当于如下代码:float floatArray=new floatArray4;/定义并创建数组floatArrayfloatArray0=12f;/初始化数组第0号元素,值为12ffloatArray1=23.4f;/初始化数组第1号元素,值为23.4ffloatArray2=45f;/初始化数组第2号元素,值为45ffloatArray3=4.5f;/初始化数组第3号元素,值为4.5f 4.1.4 一维数组的使用数组的使用一般要经过定义、创建、初始化数组,这些完成后,就可以使用数组了。下面是定义两个数组,并修改和输出数组中某个元素的值。public class ArrayDemopublic static void main(String args)int intArray=12,23,3,4,2;/定义数组intArray并初始化int temp;/定义数组tempSystem.out.println(intArray3);/输出数组元素intArray3temp=intArray;/用数组intArray初始化数组temptemp3=100;/更改数组temp中元素temp3的值System.out.println(intArray3);/再次输出数组元素intArray34.1.5 数组元素的缺省值在使用new运算创建数组变量时,数组元素的缺省值是根据数组的不同类型而缺省设置的。表描述了定义不同数据类型时缺省的数组元素值的情况。4.2 二维数组多维数组是在一维数组的基础上,将一维数组中的每一个元素再看作是一个数组。即多维数组是数组的数组。多维数组在数据存储方面具有很多应用,例如,一个班中有多个学生,每个学生有多门课程,要记录学生的分数,就可以用多维数组来实现。在程序设计中,最常用的是二维数组,关于多维数组的内容主要以二维数组为例来讲解。4.2.1 二维数组定义和创建1二维数组的定义同一维数组的定义类似,二维数组的定义也有如下两种方式。dataType arrayName;dataType arrayName;其中:dataType为数组的类型,可为Java中的任意一种数据类型;arrayName为数组的名称,必须是Java的合法的标识符;左边表示是第一维数组的维数,右边表示第二维数组的维数。2二维数组的创建同一维数组类似,二维数组也可以用new来创建。有如下两种方式。一步完成二维数组的分配,即定义和创建放在一条语句中,如:int intArray=new int46;分别为每一维分配存储空间,但必须从最高维开始,由高到低地进行设置。如:int intArray=new int2;/最高维含2个元素,即包含2个一维数组intArray0=new int4;/intArray0数组包含4个int元素intArray1=new int5;/intArray1数组包含5个int元素4.2.2 二维数组初始化二维数组的初始化可以采用两种方式。1直接进行初始化在程序设计过程中,通常会遇到数组元素的个数已知,并且元素的值可以确定。对于此种情况可以在数组定义的过程中直接申请数组的内存空间,并且为数组元素赋值。如下:int intArray=11,12,13,21,22,31,32;2以数组的数组方式进行初始化多维数组可以看作是数组的数组,故数组的初始化可采用数组逐步申请的过程,即定义、创建和赋值。4.2.3 二维数组的使用二维数组的使用和一维数组的使用方式相同,通过指定数组元素的行和列,就可以得到相对应的数组元素。实际上这里的行和列即为二维数组中某个元素的下标。需要注意的是,二维数组的下标也是从0开始的,比如下面声明创建了一个二维数组intArray:int intArray=new int23;则第一个下标的变化范围从01;第二个下标的变化范围从02。如使用了如下语句将发生异常:int intArray=new int23;intArray21=38;/第一维的下标越界,不能超过1intArray13=34;/第二维的下标越界,不能超过2 4.3 数组的操作数组是应用程序中经常使用的一种数据结构,对数组的长度和复制一个数组或获取数组的一部分操作是经常使用的。4.3.1 数组的长度数组的长度是数组元素的个数,数组的长度可通过数组提供的length属性获得。其语法格式为:int intLen=arrayName.length;/通过length获得数组的长度,其类型为int型下面的代码实现了一维数组和二维数组的长度的相关操作。int intArray=new int3;/创建一维intArray数组float floatArray=new int45;/创建二维floatArray数组int intLen=intArray.length;/获得一维数组的长度,intLen的值为3int intLen=floatArray.length;/获得二维数组floatArray第一维的长度,值为4int intLen=floatArray0.length;/获得二维数组floatArray中第0个数组的长度,值为54.3.2 数组的复制Java在System中提供了静态方法arraycopy用来实现数组的复制操作。1arraycopy方法数组的复制的方法arraycopy的语法如下:System.arraycopy(Object src,int src_position,Object dst,int dst_position,int length)2arraycopy和赋值语句当进行数组复制时,读者可能试图使用赋值语句(=)来实现,如下所示的语句:int sourceArray=2,3,12,23;int targetArray=new intsourceArray.length;targetArray=sourceArray;3应用举例下面的程序对数组sourceArray、targetArray1和targetArray2分别使用了arraycopy和赋值语句(=),并改变数组的值,看程序输出的情况。4.4 数组的排序在程序设计中,排序是经常使用的算法。例如,学生的成绩按低到高的顺序进行排序。本节将向读者介绍一种简单直观的排序方法-选择排序法。假设要按升序排列一个数组。选择排序法的实现思想是:先找到最大的数并将它放在列表的最后;然后在剩下的数中找到最大数,放到剩下这些数的最后,一直这样做下去,直到数组中剩下一个数为止。例如下面的一组数据:8 2 10 1 12 74.5 小结本章主要讲述了Java语言中非常重要的一个数据结构数组。从数组的创建、初始化到数组使用。这些都是应用数组最基本的知识。接着讲述了如何获得数组的长度以及对数组的复制操作。最后通过一个实例综合实现了对一个数组的选择排序算法。通过本章的学习,读者应掌握对数组的使用和操作。通过灵活地应用数组可以提高和改善数据处理的效率。