day06-数组
1.数组
概念:
指的是一种容器,可以同来存储同种数据类型的多个值。
但是数组容器在存储数据的时候,需要结合隐式转换考虑。
Review:数据类型大小
ps:避免麻烦,建议容器的类和存储的数据类型保持一致。
举例:
整数1 2 3 4 5 6 可以使用int类型的数组来存储。
小数1.1 1.2 1.3 1.4 就可以使用double类型的数组来存储。
字符串"aaa" "bbb" "ccc" 就可以使用String类型的数组来存储。
2.数组的定义
格式一:(常用)
数据类型 [] 数组名
比如:int [] array
格式二:
数据类型 数组名 []
比如: int array []
注意点:
1.数组名只是一个名字,任意都可以
2.方法括号跟数组名,谁写在前面,谁写在后面都是一样的
3.数组的静态初始化
完整格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,元素4...};
简化格式:
数据类型[] 数组名 = {元素1,元素2,元素3,元素4...}; ( 不需要new 数据类型[] )
注意点:
-
等号前后的数据类型必须保持一致。
-
数组一旦创建之后,长度不能发生变化,比如下面例子,创建为3个长度,数组长度确定为3不可更改
练习1:
4.地址值
数组本质是在内存中开辟了一段给定长度的空间,表示数组在内存中的位置。
直接打印数组的时候,实际出现的是数组的地址值。
如果是int数据类型,地址开头则是I。
5.数组元素访问
格式:
数组名[索引];
作用:
-
获取数组中对应索引上的值
-
修改数组中对应索引上的值,一旦修改之后,原来的值就会被覆盖了。
获取索引示例:
修改索引数值示例:
6.数组的遍历
遍历:就是把数组里面所有的内容一个一个全部取出来。
建议:一个循环只做一件事
数组的长度:数组名.length;
IDEA快速生成:
数组名.fori
练习2:统计个数
需求:定义一个数组,存储1,2,3,4,5,6,7,8,9,10
遍历数组得到每一个元素,统计数组里面一共有多少个能被3整除的数字
7.数组的动态初始化
格式:
数据类型[] 数组名 = new 数据类型[数组的长度];
对比静态,动态是创建时自定义数组长度,由虚拟机给出默认初始化值。
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,元素4...};
在打印索引位没数值的时候,会输出默认初始值:
字符类型默认初始值表现形式就是个空格。
8.数组两种初始化方式的区别
9.数组常见问题
当访问了数组中不存在的索引,就会引发索引越界异常。
避免:
针对于任意一个数组,确定索引的范围: 最小索引:0 最大索引:数组的长度 - 1
即(数组名.length - 1)
10.练习3:统计个数
需求:生成10个1~100之间的随机数存入数组。
1)求出所有数据的和
2)求所有数据的平均数
3)统计有多少个数据比平均值小
//分析:
//1.定义数组
int[] arr = new int[10];
//2.把随机数存入到数组当中
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
//每循环一次,就会生成一个新的随机数
int number = r.nextInt(100) + 1;
//把生成的随机数添加的数组当中
//数组名[索引] = 数据;
arr[i] = number;
}
// 1)求出所有数据的和
//定义求和变量
int sum = 0;
for (int i = 0; i < arr.length; i++) {
//循环得到每一个元素
//并把元素累加到sum当中
sum = sum + arr[i];
}
System.out.println("数组中所有数据的和为:" + sum);
//2)求所有数据的平均数
int avg = sum / arr.length;
System.out.println("数组中平均数为:" + avg);
//3)统计有多少个数据比平均值小
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] < avg){
count++;
}
}
//当循环结束之后,就表示我已经找到了所有的比平均数小的数据
System.out.println("在数组中,一共有" + count + "个数据,比平均数小");
//遍历数组,验证答案
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
11.练习4:交换数据
需求:定义一个数组,存入1,2,3,4,5。按照要求交换索引对应的元素。
交换前:1,2,3,4,5
交换后:5,2,3,4,1
//1.定义数组存储数据
int[] arr = {1,2,3,4,5};
//2.利用循环去交换数据
for(int i = 0,j = arr.length - 1; i < j; i++,j--){
//交换变量i和变量j指向的元素
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//当循环结束之后,那么数组中的数据就实现了头尾交换
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
12.练习5:打乱数据
需求:定义一个数组,存入1~5。要求打乱数组中所有数据的顺序。
//1.定义数组存储1~5
int[] arr = {1, 2, 3, 4, 5};
//2.循环遍历数组,从0索引开始打乱数据的顺序
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
//生成一个随机索引
int randomIndex = r.nextInt(arr.length);
//拿着随机索引指向的元素 跟 i 指向的元素进行交换
int temp = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = temp;
}
//当循环结束之后,那么数组中所有的数据已经打乱顺序了
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}