|
| 1 | +--- |
| 2 | +title: 聊聊Java的二维数组 |
| 3 | +shortTitle: 二维数组 |
| 4 | +category: |
| 5 | + - Java核心 |
| 6 | +tag: |
| 7 | + - 数组&字符串 |
| 8 | +description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,Java二维数组 |
| 9 | +head: |
| 10 | + - - meta |
| 11 | + - name: keywords |
| 12 | + content: Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,java二维数组,数组 |
| 13 | +--- |
| 14 | + |
| 15 | +## 聊聊Java的二维数组 |
| 16 | + |
| 17 | +“二哥,今天我们简单过一下二维数组吧,挺简单的。”三妹放下手机对我说。 |
| 18 | + |
| 19 | +“好啊,本来不打算讲了,因为开发中用的其实不多,也很简单,就从一维到二维,也没啥可讲的,就简单聊聊吧。”我掐灭了手中的华子,长呼一口烟,飘过三妹的头顶,引起一阵轻微的咳嗽声(😂) |
| 20 | + |
| 21 | +### 什么是二维数组 |
| 22 | + |
| 23 | +二维数组是一种数据类型,可以存储多行和多列的数据。它由一系列的行和列组成,每个元素都可以通过一个行索引和列索引来访问。例如,一个3行4列的二维数组可以表示为以下形式: |
| 24 | + |
| 25 | +```java |
| 26 | +array = [ |
| 27 | + [a, b, c, d], |
| 28 | + [e, f, g, h], |
| 29 | + [i, j, k, l] |
| 30 | +] |
| 31 | +``` |
| 32 | + |
| 33 | +在这个例子中,第一行有4个元素,第二行有4个元素,第三行有4个元素,每个元素都有一个行索引和一个列索引。例如,元素 array[1][2] 是第2行第3列的元素,它的值是 g。 |
| 34 | + |
| 35 | +使用二维数组可以有效地存储和处理表格数据,如矩阵、图像、地图等等。 |
| 36 | + |
| 37 | +### 如何在 Java 中声明一个二维数组 |
| 38 | + |
| 39 | +要在 Java 中创建二维数组,你必须指定要存储在数组中的数据类型,后跟两个方括号和数组的名称。 |
| 40 | + |
| 41 | +语法如下所示: |
| 42 | + |
| 43 | +```txt |
| 44 | +data_type[][] array_name; |
| 45 | +``` |
| 46 | + |
| 47 | +让我们看一个代码示例。 |
| 48 | + |
| 49 | +```java |
| 50 | +int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} }; |
| 51 | +``` |
| 52 | + |
| 53 | + |
| 54 | +### 如何在 Java 中访问二维数组中的元素 |
| 55 | + |
| 56 | +我们可以使用两个方括号来访问二维中的元素。 |
| 57 | + |
| 58 | +第一个表示我们要从中访问元素的数组,而第二个表示我们要访问的元素索引。 |
| 59 | + |
| 60 | +让我们用一个例子来简化上面的解释: |
| 61 | + |
| 62 | +```java |
| 63 | +int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} }; |
| 64 | + |
| 65 | +System.out.println(oddNumbers[0][0]); |
| 66 | +// 1 |
| 67 | +``` |
| 68 | + |
| 69 | +在上面的示例中,`oddNumbers` 数组中有两个数组——`{1, 3, 5, 7}` 和 `{9, 11, 13, 15}`。 |
| 70 | + |
| 71 | +第一个数组——`{1, 3, 5, 7}`——用 0 表示。 |
| 72 | + |
| 73 | +第二个数组——`{9, 11, 13, 15}`——用 1 表示。 |
| 74 | + |
| 75 | +第一个数组是 0,第二个是 1,第三个是 2,依此类推。 |
| 76 | + |
| 77 | +因此,要访问第一个数组中的项目,我们将 0 分配给第一个方括号。由于我们试图访问数组中的第一项,我们将使用它的索引,即 0:`oddNumbers[0][0]`。 |
| 78 | + |
| 79 | +让我们进一步分解它。 |
| 80 | + |
| 81 | +这是访问元素的代码:`oddNumbers[?][?]`。 |
| 82 | + |
| 83 | +我在两个方括号中都加上了问号——随着进展填写它们。 |
| 84 | + |
| 85 | +假设我们要访问第二个数组中的元素,我们的代码将如下所示:`oddNumbers[1][?]`。 |
| 86 | + |
| 87 | +现在我们要在第二个数组(`{9, 11, 13, 15}`)中尝试访问其中一个元素。就像一维数组一样,每个元素都有一个从零开始的索引。 |
| 88 | + |
| 89 | +因此,要访问第三个元素 `13`,我们将其索引号传递给第二个方括号:`oddNumbers[1][2]`。 |
| 90 | + |
| 91 | +来看这样一个例子: |
| 92 | + |
| 93 | +```java |
| 94 | +int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} }; |
| 95 | +``` |
| 96 | + |
| 97 | +我们的目标是访问第三个数组中的 21。访问方式仍然通过问号来表示:`oddNumbers[?][?]`。 |
| 98 | + |
| 99 | +我们首先给第一个问号一个指向要访问的特定数组的值。 |
| 100 | + |
| 101 | +数组 0 => `{1, 3, 5, 7}` |
| 102 | + |
| 103 | +数组 1 => `{9, 11, 13, 15}` |
| 104 | + |
| 105 | +数组 2 => `{17, 19, 21, 23}` |
| 106 | + |
| 107 | +我们要查找的数字在第三个数组中,所以是:`oddNumbers[2][?]`。 |
| 108 | + |
| 109 | +第二个方括号的值将指向要访问的元素。为此,我们必须指定元素的索引。以下是该数组中的索引: |
| 110 | + |
| 111 | +17 => 索引 0 |
| 112 | + |
| 113 | +19 => 索引 1 |
| 114 | + |
| 115 | +21 => 索引 2 |
| 116 | + |
| 117 | +23 => 索引 3 |
| 118 | + |
| 119 | +21 的索引为 2,因此我们可以将其添加到第二个方括号:`oddNumbers[2][2]`。当你将其打印到控制台时,将会打印出 21。 |
| 120 | + |
| 121 | +代码如下所示: |
| 122 | + |
| 123 | +```java |
| 124 | +int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} }; |
| 125 | + |
| 126 | +System.out.println(oddNumbers[2][2]); |
| 127 | +// 21 |
| 128 | +``` |
| 129 | + |
| 130 | +你可以使用嵌套循环,遍历二维数组中的所有项目。这是一个例子: |
| 131 | + |
| 132 | +```java |
| 133 | +int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} }; |
| 134 | + |
| 135 | +for(int i = 0; i < oddNumbers.length; i++){ |
| 136 | + for(int j = 0; j < oddNumbers[i].length; j++){ |
| 137 | + System.out.println(oddNumbers[i][j]); |
| 138 | + } |
| 139 | +} |
| 140 | + |
| 141 | +// 1 |
| 142 | +// 3 |
| 143 | +// 5 |
| 144 | +// 7 |
| 145 | +// 9 |
| 146 | +// 11 |
| 147 | +// 13 |
| 148 | +// 15 |
| 149 | +// 17 |
| 150 | +// 19 |
| 151 | +// 21 |
| 152 | +// 23 |
| 153 | +``` |
| 154 | + |
| 155 | +上面的代码将会打印出 `oddNumbers` 数组中的所有项目。 |
| 156 | + |
| 157 | +### 二维数组打印杨辉三角 |
| 158 | + |
| 159 | +“三妹,上次学一维数组的时候留了一道题,要你尝试用二维数组打印杨辉三角,你试过了吗?” |
| 160 | + |
| 161 | +“搞过了,你看我的代码。” |
| 162 | + |
| 163 | +```java |
| 164 | +import java.util.Scanner; |
| 165 | + |
| 166 | +public class YangHuiTriangle { |
| 167 | + public static void main(String[] args) { |
| 168 | + Scanner input = new Scanner(System.in); |
| 169 | + System.out.print("请输入要打印的行数:"); |
| 170 | + int n = input.nextInt(); |
| 171 | + printYangHuiTriangle(n); |
| 172 | + } |
| 173 | + |
| 174 | + public static void printYangHuiTriangle(int n) { |
| 175 | + int[][] triangle = new int[n][n]; |
| 176 | + |
| 177 | + for (int i = 0; i < n; i++) { |
| 178 | + // 每行的第一个和最后一个数字都是1 |
| 179 | + triangle[i][0] = 1; |
| 180 | + triangle[i][i] = 1; |
| 181 | + |
| 182 | + for (int j = 1; j < i; j++) { |
| 183 | + // 其他数字是上一行的两个数字之和 |
| 184 | + triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; |
| 185 | + } |
| 186 | + } |
| 187 | + |
| 188 | + // 打印杨辉三角 |
| 189 | + for (int i = 0; i < n; i++) { |
| 190 | + for (int j = 0; j <= i; j++) { |
| 191 | + System.out.print(triangle[i][j] + " "); |
| 192 | + } |
| 193 | + System.out.println(); |
| 194 | + } |
| 195 | + } |
| 196 | +} |
| 197 | +``` |
| 198 | + |
| 199 | +“这段代码使用了一个二维数组来存储杨辉三角中的数字。首先,程序要求用户输入要打印的行数,然后调用 printYangHuiTriangle 方法来生成和打印杨辉三角。在 printYangHuiTriangle 方法中,程序使用了一个嵌套的 for 循环来计算杨辉三角中的每个数字,并将结果存储在二维数组 triangle 中。最后,程序再次使用循环来遍历数组并打印出杨辉三角中的数字。”三妹认真地解释道。 |
| 200 | + |
| 201 | +“哎呀,不错呀,代码写的挺标准,都知道用 Scanner 类和控制台交互了呀!”见三妹有这样的表现,我忍不住心里乐开了花,这些天的学习也终于有了成果啊,真不错! |
| 202 | + |
| 203 | +``` |
| 204 | +请输入要打印的行数:6 |
| 205 | +1 |
| 206 | +1 1 |
| 207 | +1 2 1 |
| 208 | +1 3 3 1 |
| 209 | +1 4 6 4 1 |
| 210 | +1 5 10 10 5 1 |
| 211 | +``` |
| 212 | + |
| 213 | +---- |
| 214 | + |
| 215 | +最近整理了一份牛逼的学习资料,包括但不限于Java基础部分(JVM、Java集合框架、多线程),还囊括了 **数据库、计算机网络、算法与数据结构、设计模式、框架类Spring、Netty、微服务(Dubbo,消息队列) 网关** 等等等等……详情戳:[可以说是2022年全网最全的学习和找工作的PDF资源了](https://tobebetterjavaer.com/pdf/programmer-111.html) |
| 216 | + |
| 217 | +微信搜 **沉默王二** 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 **111** 即可免费领取。 |
| 218 | + |
| 219 | + |
0 commit comments