掌握 Java二维数组:从基本概念到实际应用
4.2 掌握Java二维数组
“二哥,今天我们简单过一下二维数组吧,挺简单的。”三妹放下手机对我说。
“好啊,本来不打算讲了,因为开发中用的其实不多,也很简单,就从一维到二维,也没啥可讲的,就简单聊聊吧。”我掐灭了手中的华子,长呼一口烟,飘过三妹的头顶,引起一阵轻微的咳嗽声(😂)
01、什么是二维数组
二维数组是一种数据类型,可以存储多行和多列的数据。它由一系列的行和列组成,每个元素都可以通过一个行索引和列索引来访问。例如,一个3行4列的二维数组可以表示为以下形式:
array = [
[a, b, c, d],
[e, f, g, h],
[i, j, k, l]
]
在这个例子中,第一行有4个元素,第二行有4个元素,第三行有4个元素,每个元素都有一个行索引和一个列索引。例如,元素 array[1][2] 是第2行第3列的元素,它的值是 g。
使用二维数组可以有效地存储和处理表格数据,如矩阵、图像、地图等等。
02、创建二维数组
要在 Java 中创建二维数组,你必须指定要存储在数组中的数据类型,后跟两个方括号和数组的名称。
语法如下所示:
data_type[][] array_name;
让我们看一个代码示例。
int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} };
03、访问二维数组中的元素
我们可以使用两个方括号来访问二维中的元素。
第一个表示我们要从中访问元素的数组,而第二个表示我们要访问的元素索引。
让我们用一个例子来简化上面的解释:
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]
。
来看这样一个例子:
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。
代码如下所示:
int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };
System.out.println(oddNumbers[2][2]);
// 21
你可以使用嵌套循环,遍历二维数组中的所有项目。这是一个例子:
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、二维数组打印杨辉三角
“三妹,上次学一维数组的时候留了一道题,要你尝试用二维数组打印杨辉三角,你试过了吗?”
“搞过了,你看我的代码。”
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 上标星 7600+ 的开源知识库《二哥的 Java 进阶之路》第一版 PDF 终于来了!包括Java基础语法、数组&字符串、OOP、集合框架、Java IO、异常处理、Java 新特性、网络编程、NIO、并发编程、JVM等等,共计 32 万余字,可以说是通俗易懂、风趣幽默……详情戳:太赞了,GitHub 上标星 7600+ 的 Java 教程
微信搜 沉默王二 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 222 即可免费领取。