数组
数组,是由数目固定的、相同类型的元素组成的有序集合,每个元素相当于一个变量。
在Java中,数组是最简单的复合数据类型
数组元素可以是任意类型,可以是简单类型,也可以是引用类型。
访问数组中的某个元素,可以通过数组名加下标的形式,例如:a[4]。
数组下标的个数就是数组的维数: 有一个下标就是一维数组,有两个下标就是二维数组,依次类推。
使用数组四步
1、声明数组 int[ ] a;
2、分配空间 a = new int[5];
3、赋值 a [0] = 3;
4、处理数据 a [0] = a[0] * 10;
1.声明数组
声明数组时不规定数组长度
2.分配空间
可以声明数组的同时分配空间:数据类型[ ] 数组名 = new 数据类型[大小] ;
3.赋值
方法一:边声明边赋值 (静态初始化)
int[ ] score = {89, 79, 76};
int[ ] score = new int[ ]{89, 79, 76};(此处不能指明数组长度)
注意:静态初始化必须在声明数组时进行,而不能写成如下形式:
int a [ ]; a[ ]={89, 79, 76};
或 int a [ ] = new int [3]; a={89, 79, 76};
方法二:动态地从键盘录入信息并赋值
Scanner input = new Scanner(System.in);
for(int i = 0; i < 30; i ++) {
score[i] = input.nextInt();
}
4.处理数据
for each访问数组与数组作为函数参数和返回值
public class TestJavaArray {
public static void main(String[] args){
int[] test= {1,2,4,5,7};
for (int i : test) {
System.out.print(i+" ");
}
System.out.println("\n");
test = TestJavaArray.reverse(test);
for (int i : test) {
System.out.print(i+" ");
}
}
public static int[] reverse(int[] arr){
int[] result = new int[arr.length];
for (int i = 0,j=result.length-1; i < arr.length; i++,j--) {
result[j] = arr[i];
}
return result;
}
}
数组边界
数组类中有唯一的成员变量:length,用来表示数组的长度,即数组元素的个数。
在Java中,数组的下标从0开始,到length-1结束,即数组a的第 一个元素是a[0],最后一个元素是a[length-1]。
与C、C++中不同,Java对数组元素要进行越界检查。
使用new创建数组对象时,自动给length赋值,数组一旦创建完毕,length就确定下来,除非重新使用new创建新的数组对象。
程序在运行过程中会对length进行检查,若发生越界访问,则会抛出一个异常。
二维数组
在JAVA中,数组的元素可以是任何已存在的类型(包括数组)。
一个一维数组又可以作为另一个一维数组的元素。
在JAVA中,元素是一维数组的数组被称为二维数组。
二维数组的创建
二维数组的创建格式:
类型名[][] 数组名=new 类型名[][];
例如:int[][] a=new int[3][4];
其意义是:a引用了一个其元素类型为int[4]的数组, a的长度是3。
或者说,数组a有3个元素,每个元素都是一个长度为4的一维整型数组。
二维数组的初始化
语法格式: 类型名[][] 数组名={{初值n1, …初值nm},{…},…};
例如, int[][] a={{1,2,3},{3,4,5},{5,6,7},{7,8,9}};
需要注意的是,下面几种表示法的语法意义:
a[i]是数组a中第i个一维数组的数组名; 例如: a[0]是数组a中第1个一维数组的数组名;
而 a[i][j]是数组a中第i个一维数组中的第j个元素的变量名; 例如: a[0][2]是数组a中第1个一维数组中的第3个元素的变量名;
二维数组每一维的大小允许不同
Java语言中,由于把二维数组看作是数组的数组,并且二维数组每一维的大小可以不同。
int intArray[ ][ ] = { {1,2}, {2,3}, {3,4,5} };
int a[ ][ ] = new int[2][ ];
a[0] = new int[3];
a[1] = new int[5];
eg:矩阵的简单处理
class Matrax{
public static void main(String[] args){ //按矩阵形式输出数组元素、计算正对角线元素之和
int[][] a={{1,2,3},{4,5,6},{7,8,9,10} ;
int i, j, diagonal_sum=0;
for( i=0;i<a.length; i++){ //按矩阵形式输出数组元素
for( j=0;j<a[i].length; j++)
System.out.print( a[i][j]+”\t” );
System.out.println(); //换行
}
for( i=0;i<a.length; i++) //计算正对角线元素之和
for( j=0;j<a[i].length; j++)
if (i==j) diagonal_sum+=a[i][j];
System.out.print(“正对角线元素之和是:” +diagonal_sum );
}
}
注:数组变量是引用变量
对引用数据类型,赋值是把原对象的引用传递给另一个引用,两个引用指向同一块内存空间(浅复制)
可以通过数组变量拷贝或者clone方法实现深复制。