数组
数组是以通用名称引用的一组类型相同的变量。可以创建任意类型的数组,并且数组可以是一维或多维的。
一维数组
一维数组本质上是一连串类型相同的变量。为了创建数组,首先必须创建期望类型的数组变量。例如,下面的语句声明了一个名为month_days的数组,该数组的类型是“int数组”:
int month_days[];
尽管这个声明确立了month_days是数组变量的事实,但是这个数组实际上并不存在。为了将month_days连接到一个实际的、物理的整数数组,必须使用new分配一个数组,并将之赋给month_days。使用new分配一个数组,必须指定要分配元素的类型和数量。通过new分配的数组,其元素会被自动初始化为0(对于数值类型)、false(对于布尔类型)或null(对于引用类型)。下面的demo分配了一个具有12个元素的整数数组,并将该数组链接到month_days:
month_days = new int[12];
执行完这条语句之后,month_days将指向具有12个整数的数组。此外数组中的所有元素都被初始化为0。
当声明数组时,可以对其进行初始化,这一过程与初始化简单类型的过程相同。Java会自动创建足够大的数组,以容纳在数组初始化器中指定的元素的数量。这时不需要使用new运算符:
int month_days[]={31,28,31,30,31,30,31,31,30,31,30,31};
总结获得一个数组的步骤
1、声明一个期望数组类型的变量。
2、使用new分配容纳该数组的内存,并将其赋给数组变量。
一般将数组变量的声明和数组本身的分配组合起来:
int month_days[] = new int[12];
多维数组
在Java中多维数组实际上是数组的数组。为了声明多维数组变量,需要使用另外一组方括号指定每个额外的索引。例如,下面声明了一个名为twoA的二维数组:
int twoA[][] = new int[4][5];
这条语句分配了一个4x5的数组,并将之赋给twoA。在内部,这个矩阵是作为int数组的数组实现的。
右边索引决定列 | |||||
左索引决定行 | [0][0] | [0][1] | [0][2] | [0][3] | [0][4] |
[1][0] | [1][1] | [1][2] | [1][3] | [1][4] | |
[2][0] | [2][1] | [2][2] | [2][3] | [2][4] | |
[3][0] | [3][1] | [3][2] | [3][3] | [3][4] |
int twoA[][] = new int[4][];
twoA[0] = new int[5];
twoA[1] = new int[5];
twoA[2] = new int[5];
twoA[3] = new int[5];
多维数组实际上是数组的数组,可以控制每个数组的长度。下面的demo创建了一个二维数组,其中第二维的长度不是相同的:
int twoA[][] = new int[4][];
twoA[0] = new int[1];
twoA[1] = new int[2];
towA[2] = new int[3];
towA[3] = new int[4];
这个程序创建的数组看起来如下:
[0][0] | |||
[1][0] | [1][1] | ||
[2][0] | [2][1] | [2][2] | |
[3][0] | [3][1] | [3][2] | [3][3] |
public class Matrix {
public static void main(String[] args) {
double m[][]={
{0*0,1*0,2*0,3*0},
{0*1,1*1,2*1,3*1},
{0*2,1*2,2*2,3*2},
{0*3,1*3,2*3,3*3}
};
int i,j;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
System.out.print(m[i][j]+" ");
}
System.out.println();
}
/*
输出结果:
0.0 0.0 0.0 0.0
0.0 1.0 2.0 3.0
0.0 2.0 4.0 6.0
0.0 3.0 6.0 9.0
*/
}
}
三维数组demo:
class ThreeAMatrix {
public static void main(String[] args) {
int threeA[][][]=new int[3][4][5];
int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
for(k=0;k<5;k++)
threeA[i][j][k] = i * j * k;
for(i=0;i<3;i++) {
for(j=0;j<4;j++){
for(k=0;k<5;k++){
System.out.print(threeA[i][j][k]+" ");
}
System.out.println();
}
System.out.println();
}
/*
输出结果:
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12
0 0 0 0 0
0 2 4 6 8
0 4 8 12 16
0 6 12 18 24
*/
}
}
总结另一种数组声明语法
另一种用于声明数组的形式:方括号位于类型限定符之后,而不是位于数组变量名的后面。例如下面两个声明是等价的:
int a1[] = new int[3];
int[] a2 = new int[3];
下面的声明也是等价的:
char twoA1[][] = new char[3][4];
char[][] twoA2 = new char[3][4];
当同时声明多个数组时,这种形式可以提供便利,下面两个声明是等价的:
int[] nums,nums2,nums3;
int nums[],nums2[],nums3[];
当将数组指定为方法的返回类型时,这种数组声明方式也是有用的。