☰
二维数组基础
2026/10/9 2:44:29 网站建设 项目流程

知识点:二维数组的概念、声明初始化、元素访问、遍历、常见应用

一、二维数组是什么

二维数组:数组的每个元素,又是一个一维数组。

可以理解成:

  • 一维数组:一排数据;
  • 二维数组:一张表格 / 矩阵,有行和列。

比如:

int[][] arr = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

二、二维数组的声明和初始化

2.1 声明格式

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

示例:

int[][] arr;

2.2 静态初始化:直接给出每行元素

数据类型[][] 数组名 = { {元素1, 元素2, ...}, {元素1, 元素2, ...}, ... };

代码示例:

public class TwoArrayDemo1 { public static void main(String[] args) { // 静态初始化:3行3列 int[][] arr = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; System.out.println(arr[0][0]); // 输出1 System.out.println(arr[1][2]); // 输出6 } }

2.3 动态初始化:先指定行数和列数

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

代码示例:

public class TwoArrayDemo2 { public static void main(String[] args) { // 动态初始化:2行3列 int[][] arr = new int[2][3]; // 赋值 arr[0][0] = 10; arr[0][1] = 20; arr[0][2] = 30; arr[1][0] = 40; arr[1][1] = 50; arr[1][2] = 60; System.out.println(arr[1][1]); // 输出50 } }

注意:动态初始化后,元素默认值和一维数组一样,int默认0,double默认0.0等。


三、二维数组元素的访问和赋值

3.1 访问元素

格式:

数组名[行索引][列索引];

示例:

public class TwoArrayDemo3 { public static void main(String[] args) { int[][] arr = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; System.out.println(arr[0][1]); // 输出2 System.out arr[1][0]); // 输出4 System.out.println(arr[2][2]); // 输出9 } }

3.2 赋值

数组名[行索引][列索引] = 值;

示例:

public class TwoArrayDemo4 { public static void main(String[] args) { int[][] arr = new int[2][2]; arr[0][0] = 100; arr[0][1] = 200; arr[1][0] = 300; arr[1][1] = 400; System.out.println(arr[1][1]); // 输出400 } }

四、二维数组的遍历

4.1 普通双层 for 循环遍历

public class TwoArrayDemo5 { public static void main(String[] args) { int[][] arr = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 外层循环:遍历每一行 for (int i = 0; i < arr.length; i++) { // 内层循环:遍历当前行的每一列 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

说明:

  • arr.length:二维数组的行数;
  • arr[i].length:第i行的列数。

4.2 for-each 遍历(增强 for 循环)

public class TwoArrayDemo6 { public static void main(String[] args) { int[][] arr = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 外层for-each:遍历每一行 for (int[] row : arr) { // 内层for-each:遍历当前行每个元素 for (int num : row) { System.out.print(num + " "); } System.out.println(); } } }

附:for-each语法

Java for-each(增强 for 循环)

语法:for(元素类型 变量名 : 数组/集合)作用:遍历数组、集合,只读,不能拿到索引,不能直接修改原数组元素引用。

1. 遍历数组
int[] arr = {10,20,30}; for(int num : arr){ System.out.println(num); }

等价普通 for:

for(int i=0;i<arr.length;i++){ int num = arr[i]; System.out.println(num); }
2. 遍历集合(ArrayList)
import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); for(String s : list){ System.out.println(s); } } }
3. 重要特点

✅ 优点:代码简洁,不用下标 ❌ 缺点:

  1. 没有索引,不能获取当前是第几个元素
  2. 遍历集合时不能增删元素,会抛ConcurrentModificationException
  3. 基本类型数组:只能读取值,修改循环内变量不会改变原数组
int[] arr = {1,2}; for(int x : arr){ x = 100; // 只是修改副本,原数组不变 }
4. 底层原理

for-each 本质是迭代器 Iterator语法糖,只要实现Iterable接口的类都能用增强 for。

5. C++ for-each(C++11 范围 for)
int arr[] = {1,2,3}; for(int x : arr){ cout << x << endl; } // 引用版本,可以修改原数组 for(int &x : arr){ x *=2; }

五、二维数组的常见操作

5.1 求所有元素总和

public class TwoArrayDemo7 { public static void main(String[] args) { int[][] arr = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int sum = 0; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { sum += arr[i][j]; } } System.out.println("总和:" + sum); // 45 } }

5.2 求最大值

public class TwoArrayDemo8 { public static void main(String[] args) { int[][] arr = { {12, 45, 9}, {68, 23, 56}, {33, 72, 19} }; int max = arr[0][0]; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { if (arr[i][j] > max) { max = arr[i][j]; } } } System.out.println("最大值:" + max); // 72 } }

5.3 二维数组转置(行列互换)

public class TwoArrayDemo9 { public static void main(String[] args) { int[][] arr = { {1, 2, 3}, {4, 5, 6} }; // 新建转置数组:原来的行变成列,原来的列变成行 int[][] transpose = new int[arr[0].length][arr.length]; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { transpose[j][i] = arr[i][j]; } } // 输出转置结果 for (int i = 0; i < transpose.length; i++) { for (int j = 0; j < transpose[i].length; j++) { System.out.print(transpose[i][j] + " "); } System.out.println(); } } }

输出:

1 4 2 5 3 6

六、二维数组的内存理解(初学者先了解即可)

二维数组其实是 “数组的数组”:

  • 二维数组变量保存的是整体地址;
  • 每一行保存的是一维数组地址;
  • 真正的数据存放在每个一维数组元素中。

简单记忆:

arr[i][j]

表示:第i行,第j列。


本章小结

  1. 二维数组:元素是一维数组,适合表示表格、矩阵。
  2. 初始化:静态初始化直接写每行;动态初始化指定行数和列数。
  3. 访问元素:数组名[行索引][列索引],索引从 0 开始。
  4. 遍历:双层 for 循环,外层遍历行,内层遍历列。
  5. 常见操作:求和、求最大值、转置。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询