多维数组
1. Why?
如果要求计算一个班的5名同学的成绩和,可以使用一维数组 + 普通循环解决。
而如果是计算三个班的各5名同学的成绩和,一维数组和普通循环实现起来不够好,所以我们才需要学习更高级的概念:多维数组。
2. 概念
多维数组,可以理解为嵌套数组。
二维数组:是以 一维数组 作为 数组元素 的数组,即 “数组的数组”。
多维数组的常见表现形式是二维数组、三维数组,但一般以二维数组居多。
多维数组在Java中,语法是存在的,但内存角度来看的话,只有一维数组。
3. 定义
方式一
// 数据类型[] 数组名 = new 数据类型[容量/长度];
// 存储一个班5名同学的成绩
// 成绩的数据类型:double
// 数组的容量:5
double[] scores = new double[5];
scores[0] = 90;
scores[1] = 80;
scores[2] = 70;
scores[3] = 60;
scores[4] = 50;
// 数据类型[][] 数组名 = new 数据类型[外维数组的容量][内维数组的容量];
// 存储三个班各5名同学的成绩
// 外维数组:存储的是3个班的成绩
// 内维数组:每个班的5名同学成绩
// 外维数组的数据类型:double[]
// 内维数组的数据类型:double
double[][] scores = new double[3][5];
// 存储第一个班成绩
scores[0][0] = 90; // 第一个班的第一个学生
scores[0][1] = 80;
scores[0][2] = 80;
scores[0][3] = 80;
scores[0][4] = 80;
// 存储第二个班成绩
scores[1][0] = 80;
scores[1][1] = 80;
scores[1][2] = 80;
scores[1][3] = 80;
scores[1][4] = 80;
// 存储第三个班成绩
scores[2][0] = 80;
scores[2][1] = 80;
scores[2][2] = 80;
scores[2][3] = 80;
scores[2][4] = 80;
数组也是一种数据类型 ,但是它不是普通的数据类型(int、double),数组存储的是一组相同数据类型的数据。 int[]、double[]。
二维数组:int[][]
三维数组:int[][][]
方式二
直接赋值
// 存储1个班5名同学成绩
double[] scores = {90, 80, 70, 60, 50};
double[] scores = new double[] {90, 80, 70, 60, 50};
// 存储3个班的各2名同学成绩
// 把{}看做是一个一维数组
double[][] scores = {{90, 80}, {80, 80}, {70, 70}};
double[][] scores = new double[][] {{90, 80}, {80, 80}, {70, 70}};
动态赋值
// 定义二维数组,用来存储3个班的各5名同学成绩
double[][] scores = new double[3][5];
Scanner input = new Scanner(System.in);
// 动态录入
// 循环外维数组
for (int i = 0; i < scores.length; i++) {
System.out.println("开始录入第" + (i+1) +"班的成绩:");
// 循环内维数组
for (int j = 0; j < scores[i].length; j++) {
System.out.print((i+1) + "班的第" + (j+1) + "个学生的成绩是:");
scores[i][j] = input.nextDouble();
}
}
System.out.println("第1个班的第2名同学成绩:" + scores[0][1]);
方式三
二维数组,定义时其实只需要指定好一维数组的容量即可。
// 存储3个班的成绩,1班3人,2班2人,3班3人
double[][] scores = new double[3][];
scores[0] = new double[3];
scores[1] = new double[2];
scores[2] = new double[3];
4. 使用
5. Arrays工具类
API:Application Programming Interface 应用程序接口。
Arrays 是 Java 提供的数组操作类,提供了大量的数组操作方法。
它和 Scanner 一样,都是在 java.util
包下的,所以在使用时也需要先 import
。