0x01 认识数组
1、什么是数组
数组就是用来存储一批同种类型数据的容器。
int[] arr = {20, 10, 80, 60, 90};
String[] names = {"张三", "李四", "王二"};
2、为什么要用数组
假如用变量学生名字,然后完成随机点名功能,怎么实现?存在有什么问题?
String name1 = "张誉";
String name2 = "刘疏桐";
String name3 = "田启峰";
...
...
String name68= "张学颖";
String name69= "李沁霖";
String name70= "陈侃";
从上面代码可以发现使用变量会导致代码繁琐,大量变量的定义,业务功能实现麻烦。那么下面使用数组,数组适合做一批同种类型数据的存储。
String[] names = {“张誉”, “刘疏桐”, “田启峰”,… “张学颖”, “李沁霖”, “陈侃”,};
0x02 数组的定义
1、静态初始化数组
数组变量名中存储的是数组在内存中的地址,数组是引用类型。完整格式写法如下
//数据类型[] 数组名 = 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};
2、动态初始化数组
定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据
//写法 数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3]
public class ArrayDemo {
public static void main(String[] args) {
//1.先定义
int[] arr = new int[3]; // 默认值 arr = [0,0,0]
System.out.println(arr[0]); //0
System.out.println(arr[1]); //0
System.out.println(arr[2]); //0
//2.后赋值
arr[0] = 12;
arr[1] = 18;
arr[2] = 32;
System.out.println(arr[0]); //12
System.out.println(arr[1]); //18
System.out.println(arr[2]); //32
}
}
3、定义数组的注意事项
1)“数据类型[] 数组名”也可以写成 “数据类型 数组名[] ”。
int[] ages =...;
int ages[] =...;
double[] scores = ...;
double scores[] = ...;
2)什么类型的数组存放什么类型的数据,否则报错。
3)数组一旦定义出来,程序执行的过程中,长度、类型就固定了。
4)元素默认值规则
5)两种初始化的的使用场景总结、注意事项说明
动态初始化:只指定数组长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景。
静态初始化:开始就存入元素值,适合一开始就能确定元素值的业务场景。
两种格式的写法是独立的,不可以混用。
//错误写法
int[] arrs = new int[3]{30,40,50};
0x03 数组的访问及其遍历
1、访问数组的全部数据
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {12, 24, 36};
//访问数组的全部数据
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
2、修改数组中的数据
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {12, 24, 36};
//修改数组中的数据
arr[0] = 66;
arr[2] = 100;
System.out.println(arr[0]); //66
System.out.println(arr[1]);
System.out.println(arr[2]); //100
}
}
3、访问数组的元素的个数
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {12, 24, 36};
//访问数组的元素的个数
System.out.println(arr.length); //3
}
}
4、数组的最大索引
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {12, 24, 36};
//获取数组的最大索引,前提是元素个数大于0,否则会抛出异常
System.out.println(arr.length - 1); //2
}
}
5、数组的遍历
遍历:就是一个一个数据的访问。
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {12, 24, 36};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
0x04 数组的案例
1、数据遍历-求和
需求:某部门5名员工的销售额分别是:16、26、36、6、100,请计算出他们部门的总销售额。
public class ArrayDemo {
public static void main(String[] args) {
//1.定义数组存储销售额
int[] money = {16, 26, 36, 6, 100};
//2.定义一个初始变量,用于累加求和
int sum = 0;
//3.遍历数组中的每个数据
for (int i = 0; i < money.length; i++) {
sum += money[i];
}
System.out.println(sum);
}
}
2、评委打分案例
案例需求:某唱歌比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕之后立即输出平均数作为选手得分
import java.util.Scanner;
public class ArrayDemo {
public static void main(String[] args) {
//某唱歌比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕之后立即输出平均数作为选手得分
//1.定义一个动态初始化的数组,负责后期存储6个评委的打分
double[] scores = new double[6];
Scanner sc = new Scanner(System.in);
//2.遍历数组中的每个位置,录入评委的分数,存入到数组中去
for (int i = 0; i < scores.length; i++) {
System.out.print("请输入当前第" + (i + 1) + "个评委的分数: ");
double score = sc.nextDouble();
scores[i] = score;
}
//3.遍历数组中的每个元素进行求和
double sum = 0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
System.out.println("选手最终的得分是" + sum / scores.length);
}
}