Java二维数组:定义、初始化与遍历,比一维数组简单

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

小夜