跳至主要內容

掌握 Java二维数组:从基本概念到实际应用

沉默王二Java核心数组&字符串约 1853 字大约 6 分钟

4.2 二维数组

“二哥,今天我们简单过一下二维数组吧,挺简单的。”三妹放下手机对我说。

“好啊,本来不打算讲了,因为开发中用的其实不多,也很简单,就从一维到二维,也没啥可讲的,就简单聊聊吧。”我掐灭了手中的华子,长呼一口烟,飘过三妹的头顶,引起一阵轻微的咳嗽声(😂)

01、什么是二维数组

二维数组是一种数据类型,可以存储多行和多列的数据。它由一系列的行和列组成,每个元素都可以通过一个行索引和列索引来访问。例如,一个3行4列的二维数组可以表示为以下形式:

array = [
  [a, b, c, d],
  [e, f, g, h],
  [i, j, k, l]
]

在这个例子中,第一行有4个元素,第二行有4个元素,第三行有4个元素,每个元素都有一个行索引和一个列索引。例如,元素 array[1][2] 是第2行第3列的元素,它的值是 g。

使用二维数组可以有效地存储和处理表格数据,如矩阵、图像、地图等等。

02、创建二维数组

要在 Java 中创建二维数组,你必须指定要存储在数组中的数据类型,后跟两个方括号和数组的名称。

语法如下所示:

data_type[][] array_name;

让我们看一个代码示例。

int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} };

03、访问二维数组中的元素

我们可以使用两个方括号来访问二维中的元素。

第一个表示我们要从中访问元素的数组,而第二个表示我们要访问的元素索引。

让我们用一个例子来简化上面的解释:

int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} };

System.out.println(oddNumbers[0][0]);
// 1

在上面的示例中,oddNumbers 数组中有两个数组——{1, 3, 5, 7}{9, 11, 13, 15}

第一个数组——{1, 3, 5, 7}——用 0 表示。

第二个数组——{9, 11, 13, 15}——用 1 表示。

第一个数组是 0,第二个是 1,第三个是 2,依此类推。

因此,要访问第一个数组中的项目,我们将 0 分配给第一个方括号。由于我们试图访问数组中的第一项,我们将使用它的索引,即 0:oddNumbers[0][0]

让我们进一步分解它。

这是访问元素的代码:oddNumbers[?][?]

我在两个方括号中都加上了问号——随着进展填写它们。

假设我们要访问第二个数组中的元素,我们的代码将如下所示:oddNumbers[1][?]

现在我们要在第二个数组({9, 11, 13, 15})中尝试访问其中一个元素。就像一维数组一样,每个元素都有一个从零开始的索引。

因此,要访问第三个元素 13,我们将其索引号传递给第二个方括号:oddNumbers[1][2]

来看这样一个例子:

int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };

我们的目标是访问第三个数组中的 21。访问方式仍然通过问号来表示:oddNumbers[?][?]

我们首先给第一个问号一个指向要访问的特定数组的值。

数组 0 => {1, 3, 5, 7}

数组 1 => {9, 11, 13, 15}

数组 2 => {17, 19, 21, 23}

我们要查找的数字在第三个数组中,所以是:oddNumbers[2][?]

第二个方括号的值将指向要访问的元素。为此,我们必须指定元素的索引。以下是该数组中的索引:

17 => 索引 0

19 => 索引 1

21 => 索引 2

23 => 索引 3

21 的索引为 2,因此我们可以将其添加到第二个方括号:oddNumbers[2][2]。当你将其打印到控制台时,将会打印出 21。

代码如下所示:

int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };

System.out.println(oddNumbers[2][2]);
// 21

你可以使用嵌套循环,遍历二维数组中的所有项目。这是一个例子:

int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };

for(int i = 0; i < oddNumbers.length; i++){
    for(int j = 0; j < oddNumbers[i].length; j++){
        System.out.println(oddNumbers[i][j]);
    }   
}

// 1
// 3
// 5
// 7
// 9
// 11
// 13
// 15
// 17
// 19
// 21
// 23

上面的代码将会打印出 oddNumbers 数组中的所有项目。

04、二维数组打印杨辉三角

“三妹,上次学一维数组的时候留了一道题,要你尝试用二维数组打印杨辉三角,你试过了吗?”

“搞过了,你看我的代码。”

import java.util.Scanner;

public class YangHuiTriangle {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入要打印的行数:");
        int n = input.nextInt();
        printYangHuiTriangle(n);
    }

    public static void printYangHuiTriangle(int n) {
        int[][] triangle = new int[n][n];

        for (int i = 0; i < n; i++) {
            // 每行的第一个和最后一个数字都是1
            triangle[i][0] = 1;
            triangle[i][i] = 1;

            for (int j = 1; j < i; j++) {
                // 其他数字是上一行的两个数字之和
                triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
            }
        }

        // 打印杨辉三角
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print(triangle[i][j] + " ");
            }
            System.out.println();
        }
    }
}

“这段代码使用了一个二维数组来存储杨辉三角中的数字。首先,程序要求用户输入要打印的行数,然后调用 printYangHuiTriangle 方法来生成和打印杨辉三角。在 printYangHuiTriangle 方法中,程序使用了一个嵌套的 for 循环来计算杨辉三角中的每个数字,并将结果存储在二维数组 triangle 中。最后,程序再次使用循环来遍历数组并打印出杨辉三角中的数字。”三妹认真地解释道。

“哎呀,不错呀,代码写的挺标准,都知道用 Scanner 类和控制台交互了呀!”见三妹有这样的表现,我忍不住心里乐开了花,这些天的学习也终于有了成果啊,真不错!

请输入要打印的行数:6
1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 

GitHub 上标星 10000+ 的开源知识库《二哥的 Java 进阶之路open in new window》第一版 PDF 终于来了!包括Java基础语法、数组&字符串、OOP、集合框架、Java IO、异常处理、Java 新特性、网络编程、NIO、并发编程、JVM等等,共计 32 万余字,500+张手绘图,可以说是通俗易懂、风趣幽默……详情戳:太赞了,GitHub 上标星 10000+ 的 Java 教程open in new window

微信搜 沉默王二 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 222 即可免费领取。