5.5 数组动态初始化
动态初始化:初始化时只是指定数组的长度,游系统为数组分配初始值。
格式:数据类型[] 数组名 = new
数据类型[数组长度]
范例:int[] arr = new int[3];
代码:
public class ArrayDemo4 {
public static void main(String[] args) {
// 定义一个数组,用来存储班级中50个学生的姓名,姓名未知,学生报道之后再进行添加
String[] arr = new String[50];
// 添加学生信息
arr[0] = "张三";
arr[1] = "李四";
// 获取
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
打印结果:
张三
李四
null
扩展:数组默认初始化值的规律
- 整数类型:默认初始化值是
0
- 小数类型:默认初始化值是
0.0
- 字符类型:默认初始化值是
\u0000
(空格)- 布尔类型:默认初始化值
false
- 引用数据类型:默认初始化值是
null
数组动态初始化和静态初始化的区别:
- 动态初始化:手动指定数组长度,由系统给出初始默认值。
- 只明确元素个数,不明确具体的数值,推荐使用动态初始化
- 举例:使用数组容器来存储键盘录入的5个整数。
- 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组长度。
- 需求中已经明确了要操作的具体数据,直接静态初始化即可。
5.6 数组常见问题
当访问了数组中不存在的索引,就会引发索引越界异常。
代码测试:
public class ArrayDemo5 {
public static void main(String[] args) {
// 定义一个数组
int[] arr = {1, 2, 3, 4, 5};
// 长度5
// 最小索引0
// 最大索引4(数组长度-1)
System.out.println(arr[5]);
}
}
报错异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at ArrayDemo.ArrayDemo5.main(ArrayDemo5.java:14)
ArrayIndexOutOfBoundsException
:数组索引超出范围异常。
5.7 数组练习
数组练习一:求最值
需求:
已知数组元素为{33, 5, 22, 44, 55}
。
请找出数组中最大值并打印在控制台。
思路:
- 定义
max
变量准备记录最大值的变化。int max = arr[0];
- 遍历数组获取每一个元素。
- 让每一个元素和max进行比较,如果找到最大的,就让
max
记录该元素。
完整代码:
public class ArrayExercise1 {
public static void main(String[] args) {
// 定义数组
int[] arr = {33, 5, 22, 44, 55};
// 定义一个变量max用来存储最大值,默认数组第一个元素是最大的
int max = arr[0];
// 循环获取数组的每一个元素
for (int j : arr) {
if (j > max) {
max = j;
}
}
System.out.println(max);
}
}
数组练习二:求和
需求:
生成10个1~100之间的随机数存入数组。
- 求出所有数据的和。
- 求出所有数据的平均数。
- 统计有多少个数据比平均值小。
完整代码:
public class ArrayExercise2 {
public static void main(String[] args) {
// 定义数组:动态初始化
int[] arr = new int[10];
// 把随机数存入数组中
Random rand = new Random();
for (int i = 0; i < arr.length; i++) {
int number = rand.nextInt(100) + 1;
arr[i] = number;
}
// 遍历数组
for (int j : arr) {
System.out.print(j + " ");
}
// 求出所有数据的和
// 定义求和变量
int sum = 0;
for (int j : arr) {
sum += j;
}
System.out.println("数组中所有数据的和为:" + sum);
// 求所有数据的平均数
int average = sum / arr.length;
System.out.println("数组中的平均数为:"+ average);
// 统计有多少个数据比平均数小
int count = 0;
for (int j : arr) {
if (j < average) {
count++;
}
}
System.out.println("数组中比平均数小的数据有:"+ count + "个");
}
}
数组练习三:交换数组中的数据
需求:
定义一个数组,存入1,2,3,4,5
。按照要求交换索引对应的元素。
交换前:1,2,3,4,5
交换后:5,4,3,2,1
逐步分析:
①:如何交换两个变量的值:关键是定义第三个临时变量,用来记录a的值。
public class ArrayExercise3 {
public static void main(String[] args) {
/* 需求:定义两个变量,交换两个变量记录的值 */
int a = 10;
int b = 20;
int temp = a;
a = b;
b = temp;
System.out.println(a);
System.out.println(b);
}
}
完整代码:
public class ArrayExercise3 {
public static void main(String[] args) {
// 定义一个数组,存储数据
int[] arr = {1, 2, 3, 4, 5};
// 利用循环去交换数据
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for (int j : arr) {
System.out.print(j + " ");
}
}
}