Skip to content

Commit a360a52

Browse files
committed
二维数组
1 parent e87b992 commit a360a52

5 files changed

Lines changed: 466 additions & 38 deletions

File tree

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
> 推荐你通过在线阅读网站进行阅读,体验更好,速度更快!
3434
>
3535
> - [**Java程序员进阶之路在线阅读网站(新版,推荐👍)**](https://tobebetterjavaer.com/)
36-
> - [技术派之Java程序员进阶之路专栏](https://paicoding.com/column)(二哥的另外一个网站)
36+
> - [技术派之Java程序员进阶之路专栏](https://paicoding.com/column/5/1)(二哥的另外一个网站)
3737
>
3838
> 如果你更喜欢离线的 PDF 版本,戳这个链接获取[👍二哥的 Java 进阶之路.pdf](docs/overview/readme.md)
3939
@@ -113,7 +113,8 @@
113113

114114
## 数组&字符串
115115

116-
- [浅入浅出Java数组](docs/array/array.md)
116+
- [一文吃透Java数组](docs/array/array.md)
117+
- [聊聊Java的二维数组](docs/array/double-array.md)
117118
- [如何优雅地打印Java数组?](docs/array/print.md)
118119
- [为什么String是不可变的?](docs/string/immutable.md)
119120
- [深入理解Java字符串常量池](docs/string/constant-pool.md)

docs/.vuepress/sidebar.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ export const sidebarConfig = sidebar({
9696
text: "2.1 Java概述及环境配置",
9797
collapsible: true,
9898
children: [
99+
"readme",
99100
"what-is-java",
100101
"java-history",
101102
"java-can-do-what",

docs/array/double-array.md

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
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+
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)

docs/home.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ head:
4242
赠人玫瑰手有余香。知识库会持续保持**更新**,欢迎收藏品鉴!推荐你通过在线阅读网站进行阅读,体验更好,速度更快!
4343

4444
- [**Java程序员进阶之路在线阅读网站(新版,推荐👍)**](https://tobebetterjavaer.com/)
45-
- [技术派之Java程序员进阶之路专栏](https://paicoding.com/column)(二哥的另外一个网站)
45+
- [技术派之Java程序员进阶之路专栏](https://paicoding.com/column/5/1)(二哥的另外一个网站)
4646

4747
如果你更喜欢离线的 PDF 版本,戳这个链接获取[👍二哥的 Java 进阶之路.pdf](https://tobebetterjavaer.com/overview/readme.html)
4848

@@ -122,7 +122,8 @@ head:
122122

123123
### 数组&字符串
124124

125-
- [浅入浅出Java数组](array/array.md)
125+
- [一文吃透Java数组](array/array.md)
126+
- [聊聊Java的二维数组](array/double-array.md)
126127
- [如何优雅地打印Java数组?](array/print.md)
127128
- [为什么String是不可变的?](string/immutable.md)
128129
- [深入理解Java字符串常量池](string/constant-pool.md)

0 commit comments

Comments
 (0)