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行初值},
};
要特別注意的是,用戶不需要定義數組的長度,因此,在數組名後面的中括號中不必填入任何內容。此外,在大括號內還有幾組大括號,每組大括號內的初值會依序指定給數組的第0、1…n行元素,如圖:
下面是關於二維數組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].length; j2++) { 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層循環,但是一般不建議使用多維數組進行操作。