数组是什么
- 数组就是一个容器,用来存储一批同种类型的数据。
例子:
20,10,80,60,90
int[ ] arr = {20,10,80,60,90};
牛二,西门,全蛋
String names = {"牛二","西门","全蛋"};
数组的应用让我们省去了大量的变量定义,使得代码更加简洁和逻辑清晰。
数组的定义和访问
静态初始化数组
静态初始化数组即定义数组的时候直接给数组赋值。
静态初始化数组的格式:
完整格式:
数据类型 [] 数组名 = new 数据类型 [] {元素1,元素2,元素3,...};
int[] ages = new int[]{1,2,3,4,5}; double scores = new double[]{89.9,99.9,85.7};
简化格式:
数据类型[] 数组名 = {元素1,元素2,元素3,...};
int[] ages = {1,2,3,4,5};
注意:
- "数据类型[] 数组名" 也可写成 "数据类型 数组名[]"。
- 什么类型的数组只能存放什么类型的数据。
数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型。
数组的访问
数组在计算机中的存储:
访问数组:数组名[索引]
取值
System.out.println(arr[0]); //12
赋值
1. arr[2] = 100; 2. System.out.println(arr[2]); //100
数组的长度属性:length
//获取数组的长度(就是数组元素的个数) System.out.println(arr.length); //3
数组的最大索引:
System.out.println(arr.length - 1)
(前提是数组中要有元素)
1.如何访问数组的元素?
- 数组名称[索引]
2.如何访问数组的长度?
- 数组名称.length
3.数组的最大索引是多少?
- 数组名.length-1 //前提:元素个数大于0
4.如果访问数组时,使用的索引超过了数组最大索引会出什么问题?
- 执行程序时会出bug,出现一个索引越界的异常提示。
数组的遍历
什么是遍历?
- 遍历:就是一个一个数据的访问。
为什么要遍历数组?
- 求和
- 元素搜索
- 找极值
如何遍历?
int[] arges = {1,2,3,4,5}; for(int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }
案例练习
需求:
- 某部门5名员工的销售额分别是:16、26、36、6、100,请计算出他们部门的总销售额。
- 把这5个数据拿到程序中去 ---> 使用数组
int[] money ={16, 26, 36, 6, 100};
2.遍历数组中的每个数据,然后在外面定义求和变量把他们累加起来。
public static void main(String[] args) { //1.定义一个数组存储5名员工的销售额 int[] meney = {16,26,36,6,100}; //2.定义一个变量用于累加求和 int sum = 0; //3.遍历这个数组 for(int i = 0; i < money.length; i++) { sum += meney[i]; } System.out.println("员工的销售总额:" + sum); }
动态初始化数组
动态初始化数组即定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组的长度。
动态初始化格式:
数据类型[] 数组名 = new 数据类型 [长度];
int[] arr = new int[3];
再进行赋值
arr[0] = 10; System.out.println(arr[0]); //10
注意:
静态初始化和动态初始化数组的写法是独立的,不可以混用。
动态初始化数组元素默认值规则:
1、动态初始化数组的写法是什么样的?有什么特点?
数据类型[] 数组名 = new 数据类型[长度];
int[] ages = new int[4];
2.动态初始化数组后元素的默认值是什么样的?
- byte、short、int、char、long类型数组的元素默认值都是0
- float、double类型数组元素的默认值都是0.0
- boolean类型数组的元素默认值是false,String类型数组的元素的默认值是null
3、两种数组定义的方法各自适合什么业务场景?
- 动态初始化:适合开始不确定具体元素值,只知道元素个数的业务场景。
- 静态初始化:适合一开始就知道要存入哪些元素值的业务场景。
案例练习
需求:
- 某歌唱比赛,需要开发一个系统:可以录入六名评委的打分,录入完毕后立即输出平均分做为选手得分。
六名评委的打分是后期录入的,一开始不知道具体的分数,因此定义一个动态初始化的数组存分数。
double[] scores = new double[6];
- 遍历数组中的每个位置,每次提示用户录入一个评委的分数,并存入到数组对应的位置。
- 遍历数组中的每个元素进行求和,最终算出平均分打印出来即可。
import java.util.Scanner; public class ArrayTest { public static void main(String[] args) { //1.定义一个动态初始化数组,存储六个评委的打分 double[] scores = new double[6]; Scanner sc = new Scanner(System.in); int sum = 0; //2.遍历数组,录入评委的分数,存入数组中 int i; for(i = 0; i < scores.length; i++) { System.out.println("请您输入当前第" + (i + 1) + "个评委的分数:"); double score = sc.nextDouble(); scores[i] = score; //对分数进行求和 sum += scores[i]; } System.out.println("选手最终得分是:" + sum / scores.length); } }
END