1.多维数组概述
多维数组:可以理解为是一种嵌套的数组。
常见形式为:二维数组、三维数组...
二维数组:是以一维数组 作为数组元素的数组,即“数组的数组”。
需求:存储1个班的5名同学的成绩
double[] scores = new double[5];
scores[0] = 90;
// ....
进阶:存储5个班的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;
注意:在定义二维数组时,可以省略内维数组容量。
例如:
double[][] scores = new double[3][];
scores[0] = new double[5];
scores[1] = new double[2];
scores[2] = new double[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);
for (int j = 0; j < scores[i].length; j++) {
System.out.printf("请输入%d班的第%d名同学成绩:", i+1, j+1);
scores[i][j] = input.nextDouble();
}
}
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.算法概述
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
食谱就是一个算法,我们就此有了“算法”概念的初步规定:一个算法是解决一个问题的进程。
5.排除算法
所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率。对于排序,我们首先要求其具有一定的稳定性,即当两个相同的元素同时出现于某个序列之中,则经过一定的排序算法之后,两者在排序前后的相对位置不发生变化。换言之,即便是两个完全相同的元素,它们在排序过程中也是各有区别的,不允许混淆不清。
排序算法也有很多种解决思路,常见的有:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序、基数排序等。
5.1冒泡排序
它重复地走访过要排序的元素列,依次比较两个相邻的元素 ,如果顺序 (如从大到小、首字母从Z到A)错误就把他们交换过来 。(相邻元素做比较,两两比较小靠前)
冒泡排序:外层循环 n-1,内层循环 n-1-i
5.2选择排序
类似于打擂台求最小值的思路。
5.3 插入排序
类似于在一个已有序列中,去比较、插入新数据,并保持现有序列。
6.应用数据类型
Java 中有 8 个【基本】数据类型:
数值:
-
整数:byte、short、int、long
-
浮点数:float、double
非数值:
-
char
-
boolean
引用数据类型:
-
数组
-
类(String是一个类,....)
-
接口
-
枚举