跳转至

多维数组

在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]; 在内存中的布局如下:

matrix[0][0] | matrix[0][1] | matrix[0][2] | matrix[1][0] | matrix[1][1] | matrix[1][2]

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中声明、初始化和操作多维数组。通过练习题,你可以进一步巩固这些知识,并应用到更复杂的编程任务中。