1、多维数组概述
数组:他是一个线性数据结构,用于存储一组相同的数据类型的数据(长度一经定义不可变)
需求:存储一个班五名同学的成绩
double[] scores = new double[5]; scores[0] = 90; // ....
需求进阶:存储三个班的各五名同学的成绩
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)错误就把他们交换过来 。(相邻元素做比较,两两比较小靠前)
例如:9, 7, 8, 6, 2,做好升序排序。
冒泡排序:外层循环 n-1,内层循环 n-1-i
5.2 选择排序
类似于打擂台求最小值的思路。
5.3 插入排序
类似于在一个已有序列中,去比较、插入新数据,并保持现有序列。
6、引用数据类型
Java 中有 8 个【基本】数据类型:
数值:
-
整数:byte、short、int、long
-
浮点数:float、double
非数值:
-
char
-
boolean
引用数据类型:
-
数组
-
类(String是一个类,....)
-
接口
-
枚举