在Java中,二维数组本质上是“数组的数组”,通过行和列的双重索引访问元素,以下是详细操作指南:
声明与初始化
// 静态初始化(直接赋值) int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 动态初始化(指定维度) int rows = 3, cols = 4; double[][] data = new double[rows][cols]; // 默认值0.0
访问单个元素
通过[行索引][列索引]
直接获取值:
int[][] arr = {{10, 20}, {30, 40}}; System.out.println(arr[0][1]); // 输出:20(第0行第1列)
遍历二维数组的3种方法
-
基础for循环(精确控制索引)
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(); }
-
增强for循环(无需索引)
for (int[] row : arr) { // 获取每一行(子数组) for (int element : row) { // 遍历当前行元素 System.out.print(element + " "); } System.out.println(); }
-
Arrays工具类(快速打印)
import java.util.Arrays; System.out.println(Arrays.deepToString(arr)); // 输出:[[10, 20], [30, 40]]
关键注意事项
-
索引范围:
- 行索引范围:
0
到数组名.length-1
- 列索引范围:
0
到数组名[行索引].length-1
- 越界访问会抛出
ArrayIndexOutOfBoundsException
- 行索引范围:
-
不规则数组(每行长度不同):
int[][] jagged = new int[3][]; jagged[0] = new int[]{1}; jagged[1] = new int[]{2, 3}; jagged[2] = new int[]{4, 5, 6};
完整示例
public class Main { public static void main(String[] args) { String[][] words = {{"Java", "Python"}, {"C++", "JavaScript"}}; // 获取特定元素 String lang = words[1][1]; // "JavaScript" // 遍历打印 for (String[] row : words) { for (String word : row) { System.out.print(word + " "); } System.out.println(); } } }
应用场景
- 表格数据处理(如Excel导入)
- 矩阵运算
- 游戏地图(棋盘/网格)
重要提示:访问前务必检查索引合法性,动态初始化时注意子数组需单独实例化(
new int[3][]
仅分配行引用,每行需再初始化)。
引用说明:
- Java官方文档:Arrays (Oracle Java SE 17)
- 《Java核心技术卷I》(Cay S. Horstmann著)第3章数组与对象
- 代码示例遵循MIT开源许可协议
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/42922.html