JavaSE 第 09 天 —— ArrayList、学生管理系统
能力目标
- 能说出集合和数组的区别:
- 能使用集合对数据进行增删改查:
- 能看懂学生管理系统执行流程:
1. ArrayList
☆1.1 集合同数组的区别对比(理解)
视频时长 / 10’38’’
1.1.1 「集合同数组的区别对比」问题
集合和数组有和区别?
1.1.2 「集合同数组的区别对比」答案
集合和数组有和区别?
- 数组:长度不可变,可以存基本类型或引用类型的数据。
- 集合:长度可变,只能存引用数据类型数据。
☆1.2 ArrayList的构造方法和添加方法(掌握)
视频时长 / 11’15’’
1.2.1 「ArrayList的构造方法和添加方法」问题
- ArrayList集合后面的这个代表什么意思?
1.2.2 「ArrayList的构造方法和添加方法」答案
- ArrayList集合后面的这个代表什么意思?
- :泛型。代表该ArrayList集合对象中只能存储String类型的数据。
- 用于约束集合中存储元素的数据类型。
1.2.3 「ArrayList的构造方法和添加方法」课堂练习
练习时长:6分钟。
需求:创建集合对象,泛型使用,并任意添加5个数据到集合中,最后在控制台输出集合。
public static void main(String[] args){
//创建集合
ArrayList<String> array = new ArrayList<String>();
//添加元素
array.add("hello");
array.add("world");
array.add("java");
array.add("IOS");
array.add("PHP");
System.out.println(array);
}
☆1.3 ArrayList常用方法(掌握)
视频时长 / 10’15’’
1.2.1 「ArrayList的构造方法和添加方法」课堂练习
练习时长:10分钟。
需求:练习视频中讲解的方法。
public static void main(String[] args) {
//创建集合
ArrayList<String> array = new ArrayList<String>();
//添加元素
array.add("hello");
array.add("world");
array.add("java");
//public boolean remove(Object o):删除指定的元素,返回删除是否成功
System.out.println(array.remove("world"));
System.out.println(array.remove("javaee"));
//public E remove(int index):删除指定索引处的元素,返回被删除的元素
System.out.println(array.remove(1));
//IndexOutOfBoundsException
System.out.println(array.remove(3));
//public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
System.out.println(array.set(1,"javaee"));
//IndexOutOfBoundsException
System.out.println(array.set(3,"javaee"));
//public E get(int index):返回指定索引处的元素
System.out.println(array.get(0));
System.out.println(array.get(1)); System.out.println(array.get(2));
//System.out.println(array.get(3)); //?????? 自己测试
//public int size():返回集合中的元素的个数
System.out.println(array.size());
//输出集合
System.out.println("array:" + array);
}
☆1.4 集合存储字符串并遍历(操作)
视频时长 / 04’27’’
1.4.1 「集合存储字符串并遍历」课堂练习
练习时长:5分钟。
需求:创建集合对象,将任意字符串添加到集合中,并遍历集合输出字符串。
public static void main(String[] args){
//创建集合
ArrayList<String> array = new ArrayList<String>();
//添加元素
array.add("hello");
array.add("world");
array.add("java");
array.add("IOS");
array.add("PHP");
//遍历集合
for(int i = 0;i < array.size();i++){
String s = array.get(i);
System.out.println(s);
}
}
☆1.5 集合存储学生对象并遍历(操作)
视频时长 / 03’40’’
1.5.1 「集合存储学生对象并遍历」问题
- 集合存储学生对象时,集合中保存的是什么?
1.5.2 「集合存储学生对象并遍历」答案
- 集合存储学生对象时,集合中保存的是什么?
- 集合中保存的是学生对象的地址值。
1.5.3 「集合存储学生对象并遍历」课堂练习
练习时长:8分钟。
需求:定义学生类,在定义测试类,在测试类中创建集合对象,再创建3个学生对象,添加到集合中,并遍历集合输出学生对象中的属性值。
// 学生类定义,此处省略,大家自行完成...
public static void main(String[] args) {
//创建集合对象
ArrayList<String> array = new ArrayList<String>();
//往集合中添加字符串对象
//创建学生对象
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("风清扬", 33);
Student s3 = new Student("张曼玉", 18);
//添加学生对象到集合中
array.add(s1);
array.add(s2);
array.add(s3);
//遍历集合的通用格式
for(int i=0; i<array.size(); i++) {
String s = array.get(i);
System.out.println(s);
}
}
☆1.6 键盘录入学生信息到集合(操作)
视频时长 / 05’48’’
1.6.1 「键盘录入学生信息到集合」课堂练习
练习时长:10分钟。
需求:定义一个方法,方法中完成键盘录入学生对象的功能,在main方法中调用该方法,获取学生对象,再将学生对象存入集合中并遍历。
public static void main(String[] args) {
//创建集合对象
ArrayList<Student> array = new ArrayList<Student>();
//为了提高代码的复用性,我们用方法来改进程序
Student s = addStudent();
Student s2 = addStudent();
Student s3 = addStudent();
// 将学生对象添加到集合中
array.add(s);
array.add(s2);
array.add(s3);
//遍历集合,采用通用遍历格式实现
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
}
public static Student addStudent() {
//键盘录入学生对象所需要的数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.next();
System.out.println("请输入学生年龄:");
String age = sc.nextAge();
//创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
Student s = new Student(name,age);
//往集合中添加学生对象
return s;
}
☆1.7 集合删除元素(操作)
视频时长 / 09’52’’
1.7.1 「集合删除元素」问题
- 调用一次remove(Object o)是否能删除集合中指定的所有元素?
1.7.2 「集合删除元素」答案
调用一次remove(Object o)是否能删除集合中指定的所有元素?
- 不行。remove()只能删除集合中的第一个元素。
- 如果想要删除所有指定的元素,需要遍历集合。
1.7.3 「集合删除元素」课堂练习
练习时长:7分钟。
需求:创建集合对象,将任意字符串添加到集合中,添加的字符串中"java"有多个元素重复,切有些连在一次,要求删除所有"java"元素,最后打印集合。
public static void main(String[] args){
//创建集合
ArrayList<String> array = new ArrayList<String>();
//添加元素
array.add("hello");
array.add("java");
array.add("java");
array.add("world");
array.add("java");
array.add("java");
array.add("java");
array.add("IOS");
array.add("PHP");
//遍历集合
for(int i = 0;i < array.size();i++){
String s = array.get(i);
// 判断字符串是否是"java"
if(s.equals("java")){
// 如果是,则删除
array.remove(i);
// 删除后,元素会补位,所以将索引回退
i--;
}
}
System.out.println(array);
}
☆1.8 集合数据筛选(操作)
视频时长 / 08’32’’
1.8.1 「集合数据筛选」问题
- 视频中,getList()方法中的集合对象,同main方法中的集合对象是否是同一个?
1.8.2 「集合数据筛选」答案
- 视频中,getList()方法中的集合对象,同main方法中的集合对象是否是同一个?
- 不是。getList()方法中新建了一个集合对象,所以同main方法中的集合对象不是同一个。而是两个完全不相干的集合。
1.8.3 「集合数据筛选」答案
练习时长:8分钟。
需求:定义一个方法,方法接收一个集合对象,方法内部先新建一个集合,再将传入集合中的年龄低于18岁的学生对象添加到新集合中,方法返回新集合。
public static void main(String[] args){
//创建集合对象
ArrayList<String> array = new ArrayList<String>();
//往集合中添加字符串对象
//创建学生对象
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("风清扬", 13);
Student s3 = new Student("张曼玉", 18);
//添加学生对象到集合中
array.add(s1);
array.add(s2);
array.add(s3);
ArrayList<Student> newArray = getList(array);
// 遍历
for(int i = 0;i<list.size();i++){
Student stu = newArray.get(i);
System.out.println(stu.getName()+"---" + stu.getAge());
}
}
public static ArrayList<Student> getList(ArrayList<Student> list){
// 创建一个新集合
ArrayList<Student> array = new ArrayList<Student>();
// 遍历集合找出年龄低于18岁的学生对象,添加到新集合中
for(int i = 0;i<list.size();i++){
Student s = list.get(i);
if(s.getAge() >= 18){
//添加到新集合中
array.add(s);
}
}
return array;
}
2 学生管理系统
☆2.1 学生管理系统项目演示(理解)
视频时长 / 03’23’’
2.1.1 「学生管理系统项目演示」问题
- 学生管理系统大概会使用到哪些学过的知识点?
2.1.2 「学生管理系统项目演示」答案
- 学生管理系统大概会使用到哪些学过的知识点?
- 循环: 欢迎界面循环展示
- 判断: 判断学号是否重复
- 键盘录入: 用户录入数据
- 集合: 存储学生对象
- switch: 匹配用户选择
☆2.2 实现步骤分析和学生类的代码编写(操作)
视频时长 / 06’06’’
2.2.1 「实现步骤分析和学生类的代码编写」课堂练习
练习时长:4分钟。
需求:完成学生类的定义。
public class Student {
//学号
private String sid;
//姓名
private String name;
//年龄
private int age;
//生日
private String brithday;
public Student() {
}
public Student(String sid, String name, int age, String brithday) {
this.sid = sid;
this.name = name;
this.age = age;
this.brithday = brithday;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(int name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getBrithday() {
return brithday;
}
public void setBrithday(String brithday) {
this.brithday = brithday;
}
}
☆2.3 菜单搭建(操作)
视频时长 / 07’03’’
2.3.1 「菜单搭建」课堂练习
练习时长:6分钟。
需求:完成菜单搭建。
public static void main(String[] args) {
//创建集合对象,用于保存学生数据信息
ArrayList<Student> array = new ArrayList<Student>();
//用循环完成再次回到主界面
while (true) {
//用输出语句完成主界面的编写
System.out.println("--------欢迎来到学生管理系统--------");
System.out.println("1 添加学生");
System.out.println("2 删除学生");
System.out.println("3 修改学生");
System.out.println("4 查看所有学生");
System.out.println("5 退出");
System.out.println("请输入你的选择:");
//用Scanner实现键盘录入数据
Scanner sc = new Scanner(System.in);
String line = sc.next();
//用switch语句完成操作的选择
switch (line) {
case "1":
//添加学生
break;
case "2":
//删除学生
break;
case "3":
//修改学生
break;
case "4":
// 查看所有学生
break;
case "5":
System.out.println("谢谢使用");
System.exit(0); //JVM退出
}
}
}
☆2.4 添加学生逻辑-基本实现(操作)
视频时长 / 08’06’’
2.4.1 「添加学生逻辑-基本实现」课堂练习
练习时长:5分钟。
需求:完成添加学生逻辑。
//定义一个方法,用于添加学生信息
public static void addStudent(ArrayList<Student> array) {
//键盘录入学生对象所需要的数据,显示提示信息,提示要输入何种信息
Scanner sc = new Scanner(System.in);
String sid = sc.next();
System.out.println("请输入学生姓名:");
String name = sc.next();
System.out.println("请输入学生年龄:");
int age = sc.next();
System.out.println("请输入学生生日:");
String brithday = sc.next();
//创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
Student s = new Student(sid,name,age,brithday);
//将学生对象添加到集合中
array.add(s);
//给出添加成功提示
System.out.println("添加学生成功");
}
☆2.5 查看学生代码实现(操作)
视频时长 / 08’20"
2.5.1 「查看学生代码实现」课堂练习
练习时长:5分钟。
需求:完成添加学生逻辑。
//定义一个方法,用于查看学生信息
public static void findAllStudent(ArrayList<Student> array) {
//判断集合中是否有数据,如果没有显示提示信息
if (array.size() == 0) {
System.out.println("无信息,请先添加信息再查询");
//为了让程序不再往下执行,我们在这里写上return;
return;
}
//显示表头信息
//\t其实是一个tab键的位置
System.out.println("学号\t\t\t姓名\t\t年龄\t\t生日");
//将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "岁\t\t" + s.getBrithday());
}
}
☆2.6 判断学号是否存在的方法定义(操作)
视频时长 / 09’52’‘’
2.6.1 「判断学号是否存在的方法定义」课堂练习
练习时长: 10分钟。
需求:完成下面案例。
//定义一个方法,判断学号是否被使用
public static boolean getIndex(ArrayList<Student> array, String sid) {
//如果与集合中的某一个学生学号相同,则index为对应的索引值,如果没有相同则index=-1
int index = -1;
// 遍历集合
for(int i=0; i < array.size(); i++) {
Student s = array.get(i);
if(s.getSid().equals(sid)) {
index = i;
break;
}
}
return index;
}
☆2.7 删除学生代码实现(操作)
视频时长 / 06’01’’
2.7.1 「删除学生代码实现」课堂练习
练习时长:7分钟
需求:完成删除学生代码实现。
//定义一个方法,用于删除学生信息
public static void deleteStudent(ArrayList<Student> array) {
//键盘录入要删除的学生学号,显示提示信息
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要删除的学生的学号:");
String sid = sc.nextLine();
// 调用getIndex()获取sid学生所在集合中的索引位置
// 如果不存在,则返回-1
int index = getIndex(array,sid);
if (index == -1) {
System.out.println("该信息不存在,请重新输入");
} else {
array.remove(index);
//给出删除成功提示
System.out.println("删除学生成功");
}
}
☆2.8 修改学生代码实现(操作)
视频时长 / 06’34’’
2.8.1 「修改学生代码实现」课堂练习
练习时长:8分钟。
需求:定义一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
//定义一个方法,用于修改学生信息
public static void updateStudent(ArrayList<Student> array) {
//键盘录入要修改的学生学号,显示提示信息
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要修改的学生的学号:");
String sid = sc.nextLine();
// 调用getIndex()获取sid学生所在集合中的索引位置
// 如果不存在,则返回-1
int index = getIndex(array,sid);
if (index == -1) {
System.out.println("该信息不存在,请重新输入");
} else {
//键盘录入要修改的学生信息
System.out.println("请输入学生新姓名:");
String name = sc.nextLine();
System.out.println("请输入学生新年龄:");
int age = sc.nextLine();
System.out.println("请输入学生新生日:");
String brithday = sc.nextLine();
//创建学生对象
Student s = new Student(sid,name,age,brithday);
// 修改集合中的学生对象
array.set(index,s);
//给出修改成功提示
System.out.println("修改学生成功");
}
}
☆2.9 解决添加学生学号的重复问题(操作)
视频时长 / 06’09’’
2.9.1 「解决添加学生学号的重复问题」课堂练习
练习时长:5分钟
需求:完成解决添加学生学号的重复问题。
//定义一个方法,用于添加学生信息
public static void addStudent(ArrayList<Student> array) {
//键盘录入学生对象所需要的数据,显示提示信息,提示要输入何种信息
Scanner sc = new Scanner(System.in);
String sid;
while (true) {
System.out.println("请输入学生学号:");
sid = sc.nextLine();
int index = getIndex(array, sid);
if (index == -1) {
// index=-1,则证明学号不存在,可以结束循环
break;
}
}
System.out.println("请输入学生姓名:");
String name = sc.next();
System.out.println("请输入学生年龄:");
int age = sc.next();
System.out.println("请输入学生生日:");
String brithday = sc.next();
//创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
Student s = new Student(sid,name,age,brithday);
//将学生对象添加到集合中
array.add(s);
//给出添加成功提示
System.out.println("添加学生成功");
}