--- title: 聊聊Java的二维数组 shortTitle: 二维数组 category: - Java核心 tag: - 数组&字符串 description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,Java二维数组 head: - - meta - name: keywords content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java二维数组,数组 --- # 4.2 聊聊Java的二维数组 “二哥,今天我们简单过一下二维数组吧,挺简单的。”三妹放下手机对我说。 “好啊,本来不打算讲了,因为开发中用的其实不多,也很简单,就从一维到二维,也没啥可讲的,就简单聊聊吧。”我掐灭了手中的华子,长呼一口烟,飘过三妹的头顶,引起一阵轻微的咳嗽声(😂) ### 什么是二维数组 二维数组是一种数据类型,可以存储多行和多列的数据。它由一系列的行和列组成,每个元素都可以通过一个行索引和列索引来访问。例如,一个3行4列的二维数组可以表示为以下形式: ```java array = [ [a, b, c, d], [e, f, g, h], [i, j, k, l] ] ``` 在这个例子中,第一行有4个元素,第二行有4个元素,第三行有4个元素,每个元素都有一个行索引和一个列索引。例如,元素 array[1][2] 是第2行第3列的元素,它的值是 g。 使用二维数组可以有效地存储和处理表格数据,如矩阵、图像、地图等等。 ### 如何在 Java 中声明一个二维数组 要在 Java 中创建二维数组,你必须指定要存储在数组中的数据类型,后跟两个方括号和数组的名称。 语法如下所示: ```txt data_type[][] array_name; ``` 让我们看一个代码示例。 ```java int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} }; ``` ### 如何在 Java 中访问二维数组中的元素 我们可以使用两个方括号来访问二维中的元素。 第一个表示我们要从中访问元素的数组,而第二个表示我们要访问的元素索引。 让我们用一个例子来简化上面的解释: ```java 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]`。 来看这样一个例子: ```java 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。 代码如下所示: ```java int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} }; System.out.println(oddNumbers[2][2]); // 21 ``` 你可以使用嵌套循环,遍历二维数组中的所有项目。这是一个例子: ```java 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` 数组中的所有项目。 ### 二维数组打印杨辉三角 “三妹,上次学一维数组的时候留了一道题,要你尝试用二维数组打印杨辉三角,你试过了吗?” “搞过了,你看我的代码。” ```java 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 ``` ---- 最近整理了一份牛逼的学习资料,包括但不限于Java基础部分(JVM、Java集合框架、多线程),还囊括了 **数据库、计算机网络、算法与数据结构、设计模式、框架类Spring、Netty、微服务(Dubbo,消息队列) 网关** 等等等等……详情戳:[可以说是2022年全网最全的学习和找工作的PDF资源了](https://tobebetterjavaer.com/pdf/programmer-111.html) 微信搜 **沉默王二** 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 **111** 即可免费领取。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)