多维数组¶
在Java中,数组是一种用于存储相同类型数据的集合。一维数组是最简单的形式,但在处理更复杂的数据结构时,我们可能需要使用多维数组。多维数组可以看作是数组的数组,最常见的多维数组是二维数组,它通常用于表示矩阵或表格数据。
1. 多维数组的概念¶
多维数组是指数组中的每个元素也是一个数组。最常见的多维数组是二维数组,它可以看作是一个表格,其中每个元素由行和列的索引来定位。例如,一个二维数组可以表示一个矩阵,其中第一个索引表示行,第二个索引表示列。
1.1 二维数组的声明与初始化¶
在Java中,二维数组的声明和初始化可以通过以下方式完成:
// 声明一个2行3列的二维数组
int[][] matrix = new int[2][3];
// 初始化二维数组
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[1][0] = 4;
matrix[1][1] = 5;
matrix[1][2] = 6;
1.2 多维数组的内存布局¶
多维数组在内存中是按行存储的。例如,一个二维数组 int[][] matrix = new int[2][3];
在内存中的布局如下:
2. 多维数组的使用¶
2.1 遍历二维数组¶
遍历二维数组通常使用嵌套的 for
循环。外层循环遍历行,内层循环遍历列。
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
// 遍历二维数组
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println(); // 换行
}
2.2 不规则多维数组¶
在Java中,多维数组的每一行可以有不同的长度,这种数组称为不规则数组。
int[][] irregularArray = {
{1, 2},
{3, 4, 5},
{6}
};
// 遍历不规则数组
for (int i = 0; i < irregularArray.length; i++) {
for (int j = 0; j < irregularArray[i].length; j++) {
System.out.print(irregularArray[i][j] + " ");
}
System.out.println(); // 换行
}
2.3 多维数组的初始化¶
多维数组可以在声明时直接初始化。
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
// 打印数组内容
for (int[] row : matrix) {
for (int value : row) {
System.out.print(value + " ");
}
System.out.println(); // 换行
}
3. 练习题¶
3.1 简单练习¶
题目1:编写一个Java程序,声明并初始化一个3x3的二维数组,然后打印出该数组的所有元素。
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 打印数组内容
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println(); // 换行
}
3.2 中等练习¶
题目2:编写一个Java程序,计算一个3x3矩阵的对角线元素之和。
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int sum = 0;
// 计算对角线元素之和
for (int i = 0; i < matrix.length; i++) {
sum += matrix[i][i]; // 主对角线
sum += matrix[i][matrix.length - 1 - i]; // 副对角线
}
System.out.println("对角线元素之和: " + sum);
3.3 复杂练习¶
题目3:编写一个Java程序,实现两个3x3矩阵的乘法。
int[][] matrix1 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int[][] matrix2 = {
{9, 8, 7},
{6, 5, 4},
{3, 2, 1}
};
int[][] result = new int[3][3];
// 矩阵乘法
for (int i = 0; i < matrix1.length; i++) {
for (int j = 0; j < matrix2[0].length; j++) {
for (int k = 0; k < matrix1[0].length; k++) {
result[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
// 打印结果矩阵
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
System.out.print(result[i][j] + " ");
}
System.out.println(); // 换行
}
4. 总结¶
- 多维数组是数组的数组,最常见的多维数组是二维数组。
- 二维数组可以看作是一个表格,其中每个元素由行和列的索引来定位。
- 多维数组可以是规则的(每行长度相同)或不规则的(每行长度不同)。
- 遍历多维数组通常使用嵌套的
for
循环。 - 多维数组在内存中是按行存储的。
通过本主题的学习,你应该能够理解多维数组的概念,并能够在Java中声明、初始化和操作多维数组。通过练习题,你可以进一步巩固这些知识,并应用到更复杂的编程任务中。