--- title: 用一根烟的时间掌握 Java二维数组 shortTitle: 二维数组 category: - Java核心 tag: - 数组&字符串 description: 本文深入讲解了Java二维数组的基本概念、创建方法、初始化方法以及常用操作。通过阅读本文,您将了解到如何定义二维数组、创建和初始化二维数组,以及如何进行二维数组的常见操作,如添加、删除、查询等。本文将帮助您快速掌握Java二维数组的使用方法和技巧(打印杨辉三角)。 head: - - meta - name: keywords content: Java, 二维数组, 创建二维数组, 初始化二维数组, 数组操作, 多维数组 --- “二哥,今天我们简单过一下二维数组吧,挺简单的。”三妹放下手机对我说。 “好啊,本来不打算讲了,因为开发中用的其实不多,也很简单,就从一维到二维,也没啥可讲的,就简单聊聊吧。”我掐灭了手中的华子,长呼一口烟,飘过三妹的头顶,引起一阵轻微的咳嗽声(😂) ### 01、什么是二维数组 二维数组是一种数据类型,可以存储多行和多列的数据。它由一系列的行和列组成,每个元素都可以通过一个行索引和列索引来访问。例如,一个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。 使用二维数组可以有效地存储和处理表格数据,如矩阵、图像、地图等等。 ### 02、创建二维数组 要在 Java 中创建二维数组,你必须指定要存储在数组中的数据类型,后跟两个方括号和数组的名称。 语法如下所示: ```txt data_type[][] array_name; ``` 让我们看一个代码示例。 ```java int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} }; ``` ### 03、访问二维数组中的元素 我们可以使用两个方括号来访问二维中的元素。 第一个表示我们要从中访问元素的数组,而第二个表示我们要访问的元素索引。 让我们用一个例子来简化上面的解释: ```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` 数组中的所有项目。 ### 04、二维数组打印杨辉三角 “三妹,上次学一维数组的时候留了一道题,要你尝试用二维数组打印杨辉三角,你试过了吗?” “搞过了,你看我的代码。” ```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 ``` ---- GitHub 上标星 10000+ 的开源知识库《[二哥的 Java 进阶之路](https://github.com/itwanger/toBeBetterJavaer)》第一版 PDF 终于来了!包括Java基础语法、数组&字符串、OOP、集合框架、Java IO、异常处理、Java 新特性、网络编程、NIO、并发编程、JVM等等,共计 32 万余字,500+张手绘图,可以说是通俗易懂、风趣幽默……详情戳:[太赞了,GitHub 上标星 10000+ 的 Java 教程](https://javabetter.cn/overview/) 微信搜 **沉默王二** 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 **222** 即可免费领取。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)