-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Expand file tree
/
Copy pathdouble-array.md
More file actions
218 lines (148 loc) · 7.5 KB
/
double-array.md
File metadata and controls
218 lines (148 loc) · 7.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
---
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** 即可免费领取。
