【Java】二维数组:从基础定义到杨辉三角实战
一、什么是二维数组?
二维数组本质是「数组的数组」,可以理解为一个表格或矩阵,通过「行索引 + 列索引」定位元素,非常适合存储表格化数据(比如学生成绩表、矩阵运算、图像像素数据等)。
直观示例:
// 存储3行4列的字符数据
char[][] letterArray = {
{'a', 'b', 'c', 'd'},
{'e', 'f', 'g', 'h'},
{'i', 'j', 'k', 'l'}
};
就像 Excel 表格一样,letterArray[0][0] 对应第一行第一列的 ‘a’,letterArray[2][3] 对应第三行第四列的 ‘l’。
二、Java 二维数组的创建方式
1. 静态初始化(直接赋值)
适合已知所有元素的场景,语法简洁直观:
// 方式1:完整语法
int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };
// 方式2:简化写法(推荐)
int[][] evenNumbers = { {2,4}, {6,8}, {10,12} };
2. 动态初始化(指定长度)
适合提前知道数组大小,但元素后续赋值的场景:
// 方式1:指定行数和列数(每行列数相同)
String[][] studentScores = new String[3][4]; // 3行4列的字符串数组
studentScores[0][0] = "张三";
studentScores[0][1] = "95"; // 张三的数学成绩
studentScores[0][2] = "88"; // 张三的语文成绩
studentScores[0][3] = "92"; // 张三的英语成绩
// 方式2:不规则数组(每行列数可不同)
int[][] irregularArray = new int[3][]; // 只指定行数,不指定列数
irregularArray[0] = new int[2]; // 第1行2列
irregularArray[1] = new int[3]; // 第2行3列
irregularArray[2] = new int[1]; // 第3行1列
irregularArray[1][2] = 99; // 赋值第2行第3列元素
三、如何访问二维数组的元素?
通过「行索引 + 列索引」访问,索引从 0 开始!语法:array[行索引][列索引]
代码示例:
public class ArrayAccessDemo {
public static void main(String[] args) {
int[][] oddNumbers = {
{1, 3, 5, 7},
{9, 11, 13, 15},
{17, 19, 21, 23}
};
// 访问第3行第3列的元素(索引2,2)
int target = oddNumbers[2][2];
System.out.println("第3行第3列的元素:" + target); // 输出:21
// 遍历整个二维数组(嵌套循环)
System.out.println("\n遍历二维数组:");
for (int i = 0; i<oddNumbers.length; i++) { // 循环行
for (int j = 0; j<oddNumbers[0].length ; j++) { // 循环列
System.out.print(oddNumbers[i][j] + " ");
}
System.out.println(); // 换行
}
}
}
运行结果:
第3行第3列的元素:21
遍历二维数组:
1 3 5 7
9 11 13 15
17 19 21 23
四、实战:用二维数组打印杨辉三角
杨辉三角的核心规律:
- 第一列和对角线元素均为 1;
- 其他元素 = 上一行相邻两个元素之和(
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j])。
完整代码实现:
import java.util.Scanner;
public class YangHuiTriangle {
public static void main(String[] args) {
// 1. 获取用户输入的行数
Scanner scanner = new Scanner(System.in);
System.out.print("请输入杨辉三角的行数:");
int rows = scanner.nextInt();
scanner.close();
// 2. 调用方法打印杨辉三角
printYangHuiTriangle(rows);
}
// 生成并打印杨辉三角
public static void printYangHuiTriangle(int rows) {
// 创建二维数组(行数=rows,列数随行数变化)
int[][] triangle = new int[rows][];
// 3. 填充二维数组(核心逻辑正确)
for (int i = 0; i < rows; i++) {
triangle[i] = new int[i + 1]; // 第i行有i+1列(索引从0开始)
// 第一列和最后一列设为1
triangle[i][0] = 1;
triangle[i][i] = 1;
// 填充其他位置的元素(从第2行第2列开始)
for (int j = 1; j < i; j++) {
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
}
}
// 4. 打印杨辉三角(修复格式化输出逻辑)
System.out.println("\n杨辉三角(" + rows + "行):");
for (int i = 0; i < rows; i++) {
// 打印前置空格实现居中:行数越大,前置空格越少
for (int k = 0; k < rows - i - 1; k++) {
System.out.print(" ");
}
// 打印数字:循环终止条件改为j <= i,确保打印每行所有数字
for (int j = 0; j <= i; j++) {
System.out.print(triangle[i][j] + " ");
}
System.out.println(); // 换行
}
}
}
运行示例(输入行数 5):
请输入杨辉三角的行数:5
杨辉三角(5行):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
五、学习小结
- 二维数组是「数组的数组」,核心是通过「行 + 列」索引操作元素;
- 静态初始化适合已知元素,动态初始化适合灵活赋值,支持不规则数组;
- 遍历需用嵌套循环,外层控行、内层控列;
- 实战中要结合业务场景(如杨辉三角、矩阵运算)理解元素关系。
如果觉得有用,欢迎点赞收藏~ 后续还会分享更多 Java 实战技巧,之前的「数据类型转换」文章也可以搭配学习,基础更扎实哦!



