Java二維數組:定義、初始化與遍歷¶
1. 什麼是二維數組?¶
我們可以把二維數組理解爲“數組的數組”。如果說一維數組是“一排數據”,那二維數組就是由多個“一排數據”組成的“矩陣”(比如數學裏的表格、矩陣)。比如,一個班級5名學生,每名學生3門課的成績,就可以用二維數組來存儲。
2. 二維數組如何定義?¶
二維數組的本質是“數組的數組”,聲明語法如下:
數據類型[][] 數組名; // 推薦寫法,更清晰
// 或者等價寫法:
數據類型[] 數組名[];
數據類型 數組名[][];
示例:聲明一個3行4列的二維數組(整數類型):
int[][] scores; // 定義一個二維數組,類型int,名字scores
3. 二維數組如何初始化?¶
初始化就是給數組賦值,分靜態初始化和動態初始化兩種方式。
(1)靜態初始化(直接賦值)¶
已知所有元素的值,直接用大括號嵌套賦值:
// 語法:數據類型[][] 數組名 = {{第一行元素}, {第二行元素}, ...};
int[][] scores = {
{90, 85, 95}, // 第0行:第1名學生成績
{88, 92, 89}, // 第1行:第2名學生成績
{76, 80, 78} // 第2行:第3名學生成績
};
注意:每行的元素個數可以不同(Java支持“不規則數組”),比如 {{1,2}, {3}} 也是合法的。
(2)動態初始化(先指定大小,再賦值)¶
先聲明數組並指定行數和列數,再單獨給元素賦值:
// 語法:數據類型[][] 數組名 = new 數據類型[行數][列數];
int[][] arr = new int[3][4]; // 定義3行4列的二維數組,所有元素默認值爲0
// 給元素賦值(按行/列索引賦值)
arr[0][0] = 10; // 第0行第0列
arr[0][1] = 20; // 第0行第1列
arr[1][2] = 30; // 第1行第2列
4. 如何遍歷二維數組?¶
二維數組的遍歷需要嵌套循環(外層循環控制“行”,內層循環控制“列”)。
(1)普通for循環遍歷(嵌套循環)¶
外層循環控制“行”,內層循環控制“列”,通過索引 arr[i][j] 訪問每個元素:
int[][] arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 外層循環:控制行數(i從0到行數-1)
for (int i = 0; i < arr.length; i++) {
// 內層循環:控制列數(j從0到列數-1)
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println(); // 換行,分隔不同行
}
輸出:
1 2 3
4 5 6
7 8 9
(2)增強for循環(foreach)遍歷¶
外層循環遍歷“每一行”(數組的數組 → 數組),內層循環遍歷“每一列”(行 → 數組),代碼更簡潔:
int[][] arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 外層循環:遍歷每一行(row是一行數據,類型爲int[])
for (int[] row : arr) {
// 內層循環:遍歷每一行中的每個元素(num是當前行的一個數)
for (int num : row) {
System.out.print(num + " ");
}
System.out.println(); // 換行
}
輸出結果與上面相同,但代碼更簡潔,適合不需要修改索引的場景。
5. 爲什麼說二維數組“比一維數組簡單”?¶
- 本質簡單:二維數組可以理解爲“一維數組的集合”,操作邏輯是“先處理行,再處理列”,和數學中的矩陣概念一致,對初學者更直觀。
- 難度可控:掌握一維數組後,二維數組只需在循環中多嵌套一層,結構類似“雙層循環”,理解成本較低。
- 應用場景明確:比如存儲表格數據(如學生成績表、班級座位表),用二維數組天然合適,無需額外定義複雜結構。
總結¶
二維數組的核心是“數組的數組”,掌握定義、初始化和嵌套遍歷即可。只要理解了一維數組的循環邏輯,二維數組通過“外層循環行+內層循環列”就能輕鬆處理。對於初學者,二維數組是數組知識的自然延伸,通過矩陣類比和嵌套循環練習,很快就能掌握!
練習建議:嘗試用二維數組存儲一個3x3的矩陣,並用兩種循環方式遍歷,觀察不同循環的區別。