1.1.1 二维数组

如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格,像Excel中的表格那样,如下图:

二维数组声明的方式和一维数组类似,内存的分配也要使用new关键字。其声明与分配内存的格式如下:

数据类型 数组名[][];

数组名 = new 数据类型[行的个数][列的个数];

与一维数组不同的是,二维数组在分配内存时,必须告诉编译器二维数组行与列的个数。范例:

int score[][];

score = new int[4][3];

同样的,可以用较为简洁的方式来声明数组:

int score[][] = new int[4][3];

上面的语句中,整型数据score可保存的元素有4*3=12个,而在Java中,int数据类型所占用的空间为4个字节,因此,该整型数组占用的内存共为4*12=48个字节,如图所示:

二维数组的定义及使用:

class ArrayDemo07{

public static void main(String[] args) {

int score[][] = new int[4][3];

score[0][1] = 30;

score[1][0] = 31;

score[2][2] = 32;

score[3][1] = 33;

score[1][1] = 30;

for (int i = 0; i < score.length; i++) {

for (int j = 0; j < score[i].length; j++) {

System.out.print(score[i][j] + "\t");

}

System.out.println();

}

}

}

运行结果:

0 30 0

31 30 0

0 0 32

0 33 0

从程序中读者应该可以找到一个规律,即一维数组如果要全部输出,需要一层循环,而二维数组要想全部输出,则应使用两层循环,同理,对于N维数组,则要使用N层循环。

二位数组也可以利用大括号进行静态初始化,只要在数组的声明格式后面再加上所赋值的初值即可,如下面的格式:

数据类型 数组名[][] = {

{

0行初值},

{

1行初值},

{

n行初值},

};

要特别注意的是,用户不需要定义数组的长度,因此,在数组名后面的中括号中不必填入任何内容。此外,在大括号内还有几组大括号,每组大括号内的初值会依序指定给数组的第01n行元素,如图:

下面是关于二维数组score声明及赋初值的范例:

class ArrayDemo08{

public static void main(String[] args) {

int score[][] = {

{12,21},

{44,55,66,77},

{2,54,767,123,32}

};

for (int i = 0; i < score.length; i++) {

for (int j = 0; j < score[i].length; j++) {

System.out.print(score[i][j] + "\t");

}

System.out.println();

}

}

}

运行结果:

12 21

44 55 66 77

2 54 767 123 32

1.1.2 多维数组

想要提高数组的维数,只要在声明数组将索引与中括号再加上一组即可,所以三围数组的声明为int score[][][],而四维数组为int score[][][][]…,以此类推。

使用多维数组时,输入、输出的方式和一维、二维数组相同,当时每多一维,嵌套循环的层数就必须多一层,所以维数越高的数组其复杂度也就越高。下面的程序为三维数组在声明时即赋初值,再将其元素值输出并计算总和:

class ArrayDemo09{

public static void main(String[] args) {

int score[][][] = {

{

{12,32,44},

{33,77}

},

{

{23,32,44,55}

}

  };

for (int i = 0; i < score.length; i++) {

for (int j = 0; j < score[i].length; j++) {

for (int j2 = 0; j2 < score[i][j].lengthj2++) {

System.out.println("score["+i+"]["+j+"]["+j2+"]---"+score[i][j][j2]+"\t");

}

}

}

}

}

运行结果:

score[0][0][0]---12

score[0][0][1]---32

score[0][0][2]---44

score[0][1][0]---33

score[0][1][1]---77

score[1][0][0]---23

score[1][0][1]---32

score[1][0][2]---44

score[1][0][3]---55

因为是三维数组所以使用了3层循环,N维数组要用N层循环,但是一般不建议使用多维数组进行操作。