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的矩阵,并用两种循环方式遍历,观察不同循环的区别。