1.多维数组概述
数组:他是一个线性数据结构,用于存储一组相同数据类型的数据(长度一经定义不可变)。
需求:存储 1 个班的 5 名同学的成绩。
double[] scores = new double[5];
scores[0] = 90;
// ...
需求进阶:存储 3 个班的各 5 名同学的成绩。
double[] scores1 = new double[5];
double[] scores2 = new double[5];
double[] scores3 = new double[5];
// ...
多维数组:可以理解为是一种嵌套的数组。
常见姓氏为:二维数组、三维数组...
二维数组:是以 一维数组 作为 数组元素 的数组,即“数组的数组”。
2.多维数组定义
一维数组的语法:
数组元素的数据类型[] 数组名 = new 数组元素的数据类型[数组的容量/长度/元素个数];
数组元素的数据类型[] 数组名 = {元素值1,元素值2,...};
数组元素的数据类型[] 数组名 = new 数组元素的数据类型[]{元素值1,元素值2,...};
// 例如:存储5名同学的成绩
double[] scores = new double[5];
double[] scores = {90, 80, 70, 60, 50};
double[] scores = new double[]{90, 80, 70, 60, 50};
// 赋值语法
数组名[下标] = 元素值;
// 例如:存储第 1 名同学的成绩
scores[0] = 90;
从内存分配预案里的角度上来看,他们都是一堆数组而已,是以 一维数组 作为 数组元素的数组,即“数组的数组”。
二维数组的语法:
- 二维数组中存储的是一个一维数组,所以就把一维数组这个类型作为二维数组的数组元素的数据类型即可。
数组元素数据类型[] 数组名 = new 数组元素的数据类型[数组的容量/长度/元素个数];
数组元素的数据类型[] 数组名 = {元素值1,元素值2,...};
数组元素的数据类型[] 数组名 = new 数组元素的数据类型[]{元素值1,元素值2,...};
// 例如:存储 3 个班各 5 名同学成绩
double[][] scores = new double[3][5];
double[][] scores = {{90, 80, 70, 60, 50},{...},{...}};
double[][] scores = new double[][]{{90, 80, 70, 60, 50},{...},{...}};
// 赋值语法
数组名[外维数组下标][内维数组下标] = 元素值;
// 例如:给第 1 个班存储第 1 名同学的成绩
scores[0][0] = 90;
注意:在定义二维数组时,可以省略内维数组的容量。
例如:
int[][] arr = new int[3][];
arr[0] = new int[5];
arr[1] = new int[4];
arr[2] = new int[3];
相比于直接在定义式制定好内维数组容量,这种方式更为灵活,内维数组可以指定不同的数组容量。
3.多维数组的遍历
使用单冲循环解决了一维数组的遍历。
使用多重循环解决多维数组的遍历。
// 存储 3 个班各 5 名同学成绩
double[][] scores = new double[3][5];
Scanner input = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
System.out.printf("请输入第%d个班的同学成绩:\n", i+1);
scores[i][j] = input.nextInt();
}
System.out.println();
// 遍历
for (int i = 0; i < scores.length; i++) {
System.out.printf("第%d个班的同学成绩列表如下:\n", i+1);
for (int j = 0; j < scores[i].length; j++) {
System.out.println(scores[i][j]);
}
}
4.多维数组的使用
参照上课代码
5.算法概述
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。不同的算法可能用不同的时间、空间或效率来完成同样的任务,一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
食谱就是一个算法,我们就此有了“算法”概念的初步定义:一个算法是解决一个问题的进程。
6.排序算法
所谓排序算法,即通过特定的算法因式将一组或多维数据按照既定模式进行重新排序。这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于帅选和计算,大大提高了计算效率。对于排序,我们首先要求其具有一定的稳定性,即当两个相同的元素公式出现于某个序列之中,则经过一定的排序算法之后,两者在排序过程中也是各有区别的,不允许混淆不清。
排序算法也有很多种解决思路,常见的有:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序、基数排序等。
6.1冒泡排序
它重读的走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。(相邻元素做比较,两两比较小靠前)
例如:9, 7, 8, 6, 2,做好升序排序。
冒泡排序:外层循环 n-1,内层循环n-1-i
6.2选择排序
类似于打擂台求最小值的思路。
6.3插入排序
类似于在一个已有序列中,去比较、插入新数据,并保持现有序列。
7.引用数据类型
java 中有 8 个【基本】数据类型:
数值:
- 整数:byte、short、int、long
- 浮点数:float、double
非数值:
- char
- boolean
引用数据类型:
- 数组
- 类(String是一个类, ...)
- 接口
- 枚举