1、Java语言程序设计讲义第五章第五章 数组主要内容: 一维数组和多维数组的有关概念和使用方法5.1 数组1数组是相同类型的元素按顺序组成的一种复合数据类型。2数组作为一种特殊的数据类型,具有以下特点: 数组中的所有元素是同一类型 数组中的元素是有顺序的 数组中的元素通过数组名和下标来确定 temp vi j k person3Java中,只有定义数组并建立数组后,数组才能被访问。4在建立数组时,Java会使每个数组元素初始化为默认值0。5若不希望数组的初值为默认值,则要将数组初始化。6Java并不支持多维数组。对多维数组的定义是通过对一维数组的嵌套式定义来实现的。7在Java中,所有数组的起始
2、下标都是0。5.2 一维数组1定义一维数组(声名)格式: type arrayName;说明: type为Java中任意的数据类型(简单类型或组合类型) arrayName为一个合法的标识符;指明是一数组类型变量。例如:int intArray; 堆栈内存区 堆内存区null intArray intArray |2建立一维数组格式: arrayName = new typearraySize;说明: arraySize指明数组的长度。例如:intArray = new int3;/为一个整型数组分配3个int型整数所占据的内存空间。intArray intArray.length intAr
3、ray0 intArray1 intArray2 堆栈内存区 堆内存区 3通常,可以将数组的定义和建立合在一起,格式如下:type arrayName=new typearraySize;例如:int intArray=new int3; 等价于下面的语句, int intArray;intArray=new int3;3初始化一维数组方法1:在定义数组的同时对数组初始化。例:int intArray=2,4,6 /系统自动为数组元素分配内存空间方法2:在定义数组并建立数组后,对数组初始化。例:intArray0=2; intArray1=4; intArray2=6;3数组元素的引用格式:a
4、rrayNameindex说明: index可以是整型常数或表达式。如a3,c6*i (i为整型)。 下标从0开始,一直到数组的长度减1。 如果下标index超出了数组大小的范围,会产生ArrayIndexOutOfBoundException异常。 与C、C+中不同,Java语言对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。例5.1:对数组中的每个元素赋值,然后按逆序输出。public class ArrayTest public static void main(String
5、 args) int i; int a=new int5; for(i=0;i5;i+) ai=i; for(i=a.length-1;i=0;i-) System.out.println(a+i+=+ai); 4数组间的复制(1) Java语言的数组是作为对象来看待,通过引用来操作的。(2) 将数组传递到方法中时,只传递数组的引用,而不是这个数组元素。(3) 一个数组变量只是生成了一个存放数组的存储位置,而未分配数组元素占用的实际内存空间。(4) 由于数组是对象,将一个数据变量赋值给另一个数组变量时,只是复制数组的引用。例:int inta=intArray; 执行完该语句后,内存空间为:
6、堆栈内存区 堆内存区 intArray inta intArray.length intArray0 intArray1 intArray2 3 2 4 6 (5)数组拷贝的另一种方法是采用java.lang.System类中的 arraycopy()方法。格式: viod arraycopy( Object sourceArray, int sourceArray, Object destinationArray, int destinationArrayStartPosition, int numberOfElementsToCopied);说明: 从源数组的给定位置,拷贝一定长度的子串到
7、目标数组的给定位置。 若拷贝过程中涉及了数组边界之外的数据,则抛出异常ArrayIndexOutOfBoundsException; 若源数组数据由于类型不匹配而无法拷贝到目标数组,则抛出异常ArrayStoreException。 在调用arraycopy方法之前,必须先分配目标数组所用的存储空间。例:int intArray=2,4,6; int a=1,2,3,4,5; System.arraycopy(intArray,0,a,0,intArray.length); 堆栈内存区 堆内存区 intArray intArray.length intArray0 intArray1 intA
8、rray2 a a.length a0 a1 a2 a3 a4 3 2 4 6 |5.3 多维数组与C、C+一样,Java语言中多维数组被看作数组的数组。例如二维数组是一个特殊的一维数组,其每个元素又是一个一维数组。1.二维数组的定义格式: type arrayName;例: int intArray;2.分配内存空间方法1: 直接为每一维分配空间 例: int a=new int23;方法2:从最高维开始,分别为每一维分配空间 例:int a=new int2; a0=new int3; a1=new int3;说明: 与C、C+不同,Java在定义和建立多维数组时,不一定要指明每一维的长度
9、。 建立数组时,数组最前面的1维或n维必须指定元素个数,只有后面的方括号中可以不指定元素个数。例:int a = new int8; 堆栈内存区 堆内存区 a length a0 a1 length a00 a01 a02 length a10 a11 a12 2 3 |3二维数组元素的引用格式:arrayNameindex1index2其中index1、index2可为整型常数或表达式。4二维数组的初始化方法1:直接对每个元素进行赋值。方法2:在定义数组的同时进行初始化。例:int a=2,3,5,1,3,4; 该句定义了一个23的数组,并对每个元素赋值。Java字符数组的定义和使用方法与上
10、述内容完全一样。例:两个矩阵Amn、Bnl相乘得到Cml,每个元素Cij=aik*bkjpublic class MatrixMultiply public static void main(String args) int i,j,k; int a=new int23; int b=1,5,2,8,5,9,10,-3,2,7,-5,-18; int c=new int24; for(i=0;i2;i+) for(j=0;j3;j+) aij=(i+1)*(j+2); for(i=0;i2;i+) for(j=0;j4;j+) cij=0; for(k=0;k3;k+) cij+=aik*bkj;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1