数组
⚫ 数组就是用来存储一批同种类型数据的内存区域(可以理解成容器)
结论:数组适合做一批同种类型数据的存储。
静态初始化数组
⚫ 定义数组的时候直接给数组赋值。
// 完整格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… };
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
int[] ages = new int[]{12, 24, 36}
// 简化格式
数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };
int[] ages = {12, 24, 36};
- 数组的静态初始化的写法是和特点什么样的?
数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };
int[] ages = {12, 24, 36, 48, 60};
double[] scores = {89.9, 99.5, 59.5};
// 完整格式
数据类型[] 数组名 = new 数据类型[]{ 元素1,元素2 ,元素3… };
int[] ages = new int[]{12, 24, 36, 48, 60}; - 数组是属于什么类型,数组变量名中存储的是什么?
⚫ 引用数据类型,存储的数组在内存中的地址信息。
数组的访问
-
如何访问数组的元素?
数组名称[索引] -
如何访问数组的长度?
数组名称.length -
数组的最大索引怎么获取?
数组名. length – 1 // 前提:元素个数大于0
动态初始化数组
-
动态初始化的写法是什么样的?
数据类型[] 数组名 = new 数据类型[长度];
int[] ages = new int[4]; -
两种数组定义时的特点和场景有什么区别
⚫ 当前已经知道存入的元素值,用静态初始化。
⚫ 当前还不清楚要存入哪些数据,用动态初始化。
动态初始化数组的元素默认值
两种初始化的的使用场景总结、注意事项说明:
⚫ 动态初始化:只指定数组长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景。
⚫ 静态初始化:开始就存入元素值,适合一开始就能确定元素值的业务场景。
⚫ 两种格式的写法是独立的,不可以混用。
- 动态初始化数组后元素的默认值是什么样的?
⚫ byte、short、int 、char、long类型数组元素的默认值都是0
⚫ float、double类型数组元素的默认值都是0.0
⚫ boolean类型数组元素的默认值是false、String类型数组元素的默认值是null
数组的遍历
⚫ 遍历:就是一个一个数据的访问。
⚫ 为什么要遍历? 搜索、数据统计等等都需要用到遍历。
快速遍历
//快速遍历用String展示
public static void main(String[]args){
int [] arr= {10,20,30,40};
String result = java.util.Arrays.toString(arr);
System.out.println(result);
}
案例
数组元素求和
数组求最值
- 数组元素求最大值如何实现的?
① 数据拿到程序中去,用数组装起来。
② 定义一个变量用于记录最大值,这个变量建议默认存储第一个元素值作为参照。
③ 遍历数组的元素,如果该元素大于变量存储的元素,则替换变量存储的值为该元素。
④ 循环结束后输出最大值变量即可。
猜数字游戏
猜数字游戏
需求
开发一个幸运小游戏,游戏规则如下:
游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:
➢ 未猜中提示:“未命中”,并继续猜测
➢ 猜中提示:“运气不错,猜中了”,并输出该数据第一次出现的位置,且输出全部5个数据, 最 终结束本游戏。
分析
① 随机生成5个1-20之间的数据存储起来 —> 使用数组
② 定义一个死循环,输入数据猜测,遍历数组,判断数据是否在数组中,如果在,进行对应提示并结束死
循环;如果没有猜中,提示继续猜测直到猜中为止。
1. 猜数字游戏的实现步骤?
① 动态初始化数组,存入5个随机的1-20之间的数据
② 定义一个死循环,不断的猜数据,遍历数组,判断数据是否在数组中,如果在,进行
对应提示并结束死循环;如果没有猜中,提示继续。
随机排名
- 如何实现随机排名的?
① 定义一个动态初始化的数组用于录入数据。
② 遍历数组中的每个元素,每次随机一个索引值,让当前元素与该索引位置处的元素进行交换。
③ 遍历输出数组中的内容即可。
数组排序
冒泡排序
⚫ 每次从数组中找出最大值放在数组的后面去
实现冒泡排序的关键步骤分析
⚫ 确定总共需要做几轮: 数组的长度-1.
⚫ 每轮比较几次:
⚫ 当前位置大于后一个位置则交换数据
- 冒泡排序的思想
⚫ 从头开始两两比较,把较大的元素与较小的元素进行交换
⚫ 每轮把当前最大的一个元素存入到数组当前的末尾。 - 冒泡排序的实现步骤。
⚫ 定义一个外部循环控制总共需要冒几轮(数组的长度-1) ⚫ 定义一个内部循环,控制每轮依次往后比较几个位置(数组长度-i-1)。
⚫ 如果当前位置的元素值>后一个位置的元素值,两者交换。
public static void bubbleSort(int arr[]) {
for(int i =0 ; i< arr.length-1 ; i++) {
for(int j=0 ; j < arr.length-1-i ; j++)
{ if(arr[j]>arr[j+1])
{ int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp; } } } }