一维数组
一. 什么是数组
1. 数组的理解
- 多个相同类型的数据按一定顺序排列的集合,并使用一个名字命名
- 通过编号的方式对这些数据统一管理
2. 数组相关的概念
- 数组名
- 元素
- 索引
- 长度
3. 数组的特点
- 有序排列
- 引用类型有三种
- 数组
- 接口
- 类
- 数组的元素类型
- 可以是基本数据类型
- 也可以是引用数据类型
- 创建数组对象会在内存中开辟出一个连续的空间
- 数组的长度一旦确定,就不可修改
4. 数组的分类
- 按照维数
- 一维
- 二维
- …
- 按照元素类型
- 基本数据类型元素的数组
- 引用数据类型元素的数组
二. 一维数组的基本使用
1. 一维数组的声明和初始化
-
静态初始化
-
初始化和元素赋值同时进行
-
int[] ids; // 声明 ids = new int[]{1, 2, 3, 4}; // 初始化,是引用类型需要new
-
-
动态初始化
-
初始化和元素赋值分开进行
-
String[] name = new String[5]; // 但并没有赋值 name[0] = "小米"; name[1] = "小花"; name[2] = "小红"; name[3] = "小明";
-
-
总结:
- 数据一旦初始化完成,长度就确定了
2. 通过索引操作数组元素
-
通过索引给数组赋值
-
索引是从0开始的,到数组的length-1结束
-
String[] people = new String[3]; // 动态初始化 people[0] = "张三"; people[1] = "李四"; people[2] = "王五";
-
3. 遍历数组
String[] stu = new String[4];
stu[0] = "刘备";
stu[1] = "关羽";
stu[2] = "张飞";
stu[3] = "诸葛亮";
for (int i = 0; i < stu.length; i++) {
System.out.println(stu[i]);
}
4. 数组元素的默认初始值
-
整型:0
-
int[] arr1 = new int[4]; System.out.println(arr1[1]); // 0
-
-
浮点型:0.0
-
float[] arr2 = new float[3]; System.out.println(arr2[1]); // 0.0
-
-
char型:0或者 ‘\u0000’ ,非自然数0
-
char[] arr3 = new char[3]; System.out.println("----"+arr3[1]+"-----"); // 0空格
-
-
boolean型:false
-
boolean[] arr4 = new boolean[3]; System.out.println(arr4[1]); // false
-
-
引用类型:null
-
String[] arr5 = new String[3]; System.out.println(arr5[1]); // null
-
5. 一维数组的内存解析
-
根据以下代码画出内存图
-
注意:String字符串应该在常量池中
-
int[] arr = new int[]{1,2,3}; String[] arr6 = new String[4]; arr6[1] = "黎明"; arr6[2] = "郭富城"; arr6 = new String[3]; System.out.println(arr6[1]); // null
-
-
内存图
三. 练习题
1. 练习1
单间出租4个月,550元/月(水电煤公摊,网费35元/月),空调,卫生间,厨房齐全。屋内是IT行业人士,喜欢安静,要求来租者最好是同行或者刚毕业的年轻人,爱干净,安静。根据代码求出号码
int[] temp = new int[]{8,2,1,0,3};
int[] index = new int[]{2,0,3,2,4,0,1,3,2,3,3};
String tel = "";
for (int i = 0; i < index.length; i++) {
tel += temp[index[i]];
}
System.out.println("联系方式:"+tel); // 18013820100
2. 练习2
* 从键盘读入学生成绩,找出最高分,并输出学生成绩等级(先输入学生人数,再根据人数创建数组)
* 成绩>=最高分-10 等级为A
* 成绩>=最高分-20 等级为B
* 成绩>=最高分-30 等级为C
* 其余 等级为D
// 1.使用Scanner,读取学生个数
Scanner scan = new Scanner(System.in);
System.out.println("请输入学生人数:");
int number = scan.nextInt();
// 2.创建数组,动态初始化
int[] stuResult = new int[number];
// 3.给数组中元素赋值
System.out.println("请输入"+number+"个学生成绩:");
for (int i = 0; i < stuResult.length; i++) {
stuResult[i] = scan.nextInt();
}
// 4.获取数组中元素的最大值:最高分
int maxResult = 0;
for (int i = 0; i < stuResult.length; i++) {
if (maxResult < stuResult[i]) {
maxResult = stuResult[i];
}
}
// 5,根据每个学生成绩与最高分的差值,得到每个学生的等级,并输出等级和成绩
char level;
for (int i = 0; i < stuResult.length; i++) {
if (maxResult - stuResult[i] <= 10) {
level = 'A';
}else if (maxResult - stuResult[i] <= 20) {
level = 'B';
}else if (maxResult - stuResult[i] <= 30) {
level = 'C';
}else {
level = 'D';
}
System.out.println("学生"+(i+1)+"成绩是"+stuResult[i]+",等级是"+level);
}