数组是什么
⚫ 数组就是用来存储一批同种类型数据的内存区域(可以理解成容器)。
1. 数组的静态初始化的写法是和特点什么样的?
数据类型[] 数组名 = { 元素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};
2. 数组是属于什么类型,数组变量名中存储的是什么?
⚫ 引用数据类型,存储的数组在内存中的地址信息。
1. 如何访问数组的元素?数组名称[索引]
2. 如何访问数组的长度?
⚫ 数组名称.length
3. 数组的最大索引怎么获取?
数组名. length – 1 // 前提:元素个数大于0
⚫ 数组一旦定义出来,程序执行的过程中,长度、类型就固定了。
1. 动态初始化的写法是什么样的?
数据类型[] 数组名 = new 数据类型[长度];
int[] ages = new int[4];
2. 两种数组定义时的特点和场景有什么区别
⚫ 当前已经知道存入的元素值,用静态初始化。
⚫ 当前还不清楚要存入哪些数据,用动态初始化。
1. 什么是遍历?
⚫ 一个一个的把数据访问一遍
2. 如何遍历数组?
int[] ages = {20, 30, 40, 50};
for (int i = 0; i < ages.length; i++) {
System.out.println(ages[i]);
}
数组遍历-求和
需求:某部门5名员工的销售额分别是:16、26、36、6、100,请计算出他们部门的总销售额。
分析:
① 把这5个数据拿到程序中去 ---> 使用数组
int[] money = {16, 26, 36, 6, 100};
② 遍历数组中的每个数据,然后在外面定义求和变量把他们累加起来。
int sum = 0;
for (int i = 0; i < money.length; i++) {
// i = 0 1 2 3 4
sum += money[i];
}
1. 数组元素求最大值如何实现的?
① 数据拿到程序中去,用数组装起来。
② 定义一个变量用于记录最大值,这个变量建议默认存储第一个元素值作为参照。
③ 遍历数组的元素,如果该元素大于变量存储的元素,则替换变量存储的值为该元素。
④ 循环结束后输出最大值变量即可。
需求
开发一个幸运小游戏,游戏规则如下:
游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:
➢ 未猜中提示:“未命中”,并继续猜测
➢ 猜中提示:“运气不错,猜中了”,并输出该数据第一次出现的位置,且输出全部5个数据, 最
终结束本游戏。
分析
① 随机生成5个1-20之间的数据存储起来 ---> 使用数组
② 定义一个死循环,输入数据猜测,遍历数组,判断数据是否在数组中,如果在,进行对应提示并结束死
循环;如果没有猜中,提示继续猜测直到猜中为止。
import java.util.Random;
import java.util.Scanner;
public class Threaddemo {
public static void main(String[] args) {
/*需求
开发一个幸运小游戏,游戏规则如下:
游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:
➢ 未猜中提示:“未命中”,并继续猜测
➢ 猜中提示:“运气不错,猜中了”,并输出该数据第一次出现的位置,且输出全部5个数据, 最
终结束本游戏。
分析
① 随机生成5个1-20之间的数据存储起来 ---> 使用数组
② 定义一个死循环,输入数据猜测,遍历数组,判断数据是否在数组中,如果在,进行对应提示并结束死
循环;如果没有猜中,提示继续猜测直到猜中为止。*/
int[] arr = new int[5];
Random r =new Random();
for(int i =0;i<5;i++){
int a = r.nextInt(20)+1;
arr[i] = a;
}
Scanner sc =new Scanner(System.in);
OUT:
while(true) {
int num = sc.nextInt();
for(int j=0;j<5;j++){
if(num == arr[j]){
System.out.println("运气不错,猜中了");
System.out.println("第一次出现位置是"+j);
for(int m =0;m<5;m++) {
System.out.print(arr[m]+"\t");}
break OUT;}
else if(num > arr[j]) {System.out.print("猜大了");break;}
else if(num < arr[j]) {System.out.print("猜小了");break;}
}
}
}
}
随机排名
需求
某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。
请先依次录入5名员工的工号,然后展示出一组随机的排名顺序。
分析
① 在程序中录入5名员工的工号存储起来 ---> 使用数组。
② 依次遍历数组中的每个元素,随机一个索引数据,让当前元素与该索引位置处的元素进行交换。
import java.util.Random;
public class Threaddemo {
public static void main(String[] args) {
/*随机排名
需求
某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。
请先依次录入5名员工的工号,然后展示出一组随机的排名顺序。
分析
① 在程序中录入5名员工的工号存储起来 ---> 使用数组。
② 依次遍历数组中的每个元素,随机一个索引数据,让当前元素与该索引位置处的元素进行交换。*/
int[] arr = {22,33,35,13,88};
int temp =0;
Random sc = new Random();
for(int j=0;j<5;j++) {
int i = sc.nextInt(5);
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
for(int a=0;a<5;a++) {
System.out.print(arr[a]+"\t");
}
}
}
数组排序
⚫ 就是对数组中的元素,进行升序(由小到大)或者降序(由大到小)的操作。
数组排序的技术
⚫ 冒泡排序
⚫ 选择排序
⚫ 快速排序
⚫ 插入排序
⚫ ...
数组搜索相关的技术
⚫ 二分搜索
⚫ 分块查找
⚫ 哈希表查找
⚫ …
1. 冒泡排序的思想
⚫ 从头开始两两比较,把较大的元素与较小的元素进行交换
⚫ 每轮把当前最大的一个元素存入到数组当前的末尾。
2. 冒泡排序的实现步骤。
⚫ 定义一个外部循环控制总共需要冒几轮(数组的长度-1)
⚫ 定义一个内部循环,控制每轮依次往后比较几个位置(数组长度-i-1)。
⚫ 如果当前位置的元素值>后一个位置的元素值,两者交换。
java内存
数组使用常见问题
⚫ 问题1:如果访问的元素位置超过最大索引,执行时会出现ArrayIndexOutOfBoundsException(数组索引越界异常)
⚫ 问题2:如果数组变量中没有存储数组的地址,而是null, 在访问数组信息时会出现NullPointerException(空指针异常)
Debug工具
⚫ IDEA自带的断点调试(排错)工具,可以控制代码从断点开始一行一行的执行,然后详细观看程序执行的情况。
DEBUG工具基本使用步骤
① 在需要控制的代码行左侧,点击一下,形成断点
② 选择使用Debug方式启动程序,启动后程序会在断点暂停
③ 控制代码一行一行的往下执行