Java语言程序设计讲义第五章.docx
《Java语言程序设计讲义第五章.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计讲义第五章.docx(13页珍藏版)》请在冰豆网上搜索。
Java语言程序设计讲义第五章
第五章数组
主要内容:
一维数组和多维数组的有关概念和使用方法
5.1数组
1.数组是相同类型的元素按顺序组成的一种复合数据类型。
2.数组作为一种特殊的数据类型,具有以下特点:
●数组中的所有元素是同一类型
●数组中的元素是有顺序的
●数组中的元素通过数组名和下标来确定tempvijkperson
3.Java中,只有定义数组并建立数组后,数组才能被访问。
4.在建立数组时,Java会使每个数组元素初始化为默认值0。
5.若不希望数组的初值为默认值,则要将数组初始化。
6.Java并不支持多维数组。
对多维数组的定义是通过对一维数组的嵌套式定义来实现的。
7.在Java中,所有数组的起始下标都是0。
5.2一维数组
1.定义一维数组(声名)
格式:
typearrayName[];
说明:
●type为Java中任意的数据类型(简单类型或组合类型)
●arrayName为一个合法的标识符;[]指明是一数组类型变量。
例如:
intintArray[];
堆栈内存区堆内存区
null
intArray
intArray|
2.建立一维数组
格式:
arrayName=newtype[arraySize];
说明:
arraySize指明数组的长度。
例如:
intArray=newint[3];
//为一个整型数组分配3个int型整数所占据的内存空间。
intArray
intArray.length
intArray[0]
intArray[1]
intArray[2]
堆栈内存区堆内存区
3
通常,可以将数组的定义和建立合在一起,格式如下:
typearrayName=newtype[arraySize];
例如:
intintArray=newint[3];等价于下面的语句,
intintArray[];intArray=newint[3];
3.初始化一维数组
方法1:
在定义数组的同时对数组初始化。
例:
intintArray[]={2,4,6}//系统自动为数组元素分配内存空间
方法2:
在定义数组并建立数组后,对数组初始化。
例:
intArray[0]=2;intArray[1]=4;intArray[2]=6;
3.数组元素的引用
格式:
arrayName[index]
说明:
●index可以是整型常数或表达式。
如a[3],c[6*i](i为整型)。
●下标从0开始,一直到数组的长度减1。
●如果下标index超出了数组大小的范围,会产生ArrayIndexOutOfBoundException异常。
●与C、C++中不同,Java语言对数组元素要进行越界检查以保证安全性。
同时,对于每个数组都有一个属性length指明它的长度,例如:
intArray.length指明数组intArray的长度。
例5.1:
对数组中的每个元素赋值,然后按逆序输出。
publicclassArrayTest{
publicstaticvoidmain(Stringargs[]){
inti;
inta[]=newint[5];
for(i=0;i<5;i++)
a[i]=i;
for(i=a.length-1;i>=0;i--)
System.out.println("a["+i+"]="+a[i]);
}
}
4.数组间的复制
(1)Java语言的数组是作为对象来看待,通过引用来操作的。
(2)将数组传递到方法中时,只传递数组的引用,而不是这个数组元素。
(3)一个数组变量只是生成了一个存放数组的存储位置,而未分配数组元素占用的实际内存空间。
(4)由于数组是对象,将一个数据变量赋值给另一个数组变量时,只是复制数组的引用。
例:
intinta[]=intArray;执行完该语句后,内存空间为:
堆栈内存区堆内存区
intArray
inta
intArray.length
intArray[0]
intArray[1]
intArray[2]
3
2
4
6
(5)数组拷贝的另一种方法是采用java.lang.System类中的arraycopy()方法。
格式:
viodarraycopy(ObjectsourceArray,intsourceArray,
ObjectdestinationArray,
intdestinationArrayStartPosition,
intnumberOfElementsToCopied);
说明:
●从源数组的给定位置,拷贝一定长度的子串到目标数组的给定位置。
●若拷贝过程中涉及了数组边界之外的数据,则抛出异常ArrayIndexOutOfBoundsException;
●若源数组数据由于类型不匹配而无法拷贝到目标数组,则抛出异常ArrayStoreException。
●在调用arraycopy方法之前,必须先分配目标数组所用的存储空间。
例:
intintArray[]={2,4,6};inta[]={1,2,3,4,5};
System.arraycopy(intArray,0,a,0,intArray.length);
堆栈内存区堆内存区
intArray
intArray.length
intArray[0]
intArray[1]
intArray[2]
a
a.length
a[0]
a[1]
a[2]
a[3]
a[4]
3
2
4
6
|
5.3多维数组
与C、C++一样,Java语言中多维数组被看作数组的数组。
例如二维数组是一个特殊的一维数组,其每个元素又是一个一维数组。
1.二维数组的定义
格式:
typearrayName[][];
例:
intintArray[][];
2.分配内存空间
方法1:
直接为每一维分配空间
例:
inta[][]=newint[2][3];
方法2:
从最高维开始,分别为每一维分配空间
例:
inta[][]=newint[2][];
a[0]=newint[3];
a[1]=newint[3];
说明:
●与C、C++不同,Java在定义和建立多维数组时,不一定要指明每一维的长度。
●建立数组时,数组最前面的1维或n维必须指定元素个数,只有后面的方括号中可以不指定元素个数。
例:
inta[][][]=newint[8][][];
堆栈内存区堆内存区
a
length
a[0]
a[1]
length
a[0][0]
a[0][1]
a[0][2]
length
a[1][0]
a[1][1]
a[1][2]
2
3
|
3.二维数组元素的引用
格式:
arrayName[index1][index2]
其中index1、index2可为整型常数或表达式。
4.二维数组的初始化
方法1:
直接对每个元素进行赋值。
方法2:
在定义数组的同时进行初始化。
例:
inta[][]={{2,3,5},{1,3,4}};
该句定义了一个2×3的数组,并对每个元素赋值。
Java字符数组的定义和使用方法与上述内容完全一样。
例:
两个矩阵Am×n、Bn×l相乘得到Cm×l,每个元素Cij=aik*bkj
publicclassMatrixMultiply{
publicstaticvoidmain(Stringargs[]){
inti,j,k;
inta[][]=newint[2][3];
intb[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};
intc[][]=newint[2][4];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
a[i][j]=(i+1)*(j+2);
for(i=0;i<2;i++){
for(j=0;j<4;j++){
c[i][j]=0;
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}