Java学习笔记(新手纯小白向)
第一章 JAVA基础概念
第二章 JAVA安装和环境配置
第三章 IntelliJ IDEA安装
第四章 运算符
第五章 运算符联系
第六章 判断与循环
第七章 判断与循环练习
第八章 循环高级综合
第九章 数组介绍及其内存图
第十章 数组基础练习
第十一章 方法基础及简单应用
第十二章 方法基础练习
第十三章 前续知识综合练习
第十四章 面向对象基础
第十五章 面向对象综合训练
第十六章 字符串基础
第十七章 字符串基础练习
第十八章 ArrayList集合
第十九章 ArrayList集合基础练习
目录
Java学习笔记(新手纯小白向)
前言
一、ArrayList集合
1.集合与数组的对比
1、长度
2、存储类型
2.创建集合的对象
1、泛型
2、ArrayList成员方法
3、基本数据类型对应的包装类
4、集合遍历
5、代码演示
3.练习
1、添加用户对象并判断是否存在
2、手机信息
二、学生管理系统
1.需求
2.分析
3. 业务结构分析
4.参考代码
三、升级版学生管理系统
1.需求
2.分析
3.业务总体结构分析
4.注册业务分析
5.登录业务分析
6.修改密码业务分析
7.参考代码
总结
前言
本篇章主要介绍了ArrayList集合的一些基础概念及其使用方法与场景,并且编写了一个比较综合的学生管理系统,能对所学知识进行串联。
一、ArrayList集合
1.集合与数组的对比
1、长度
数组长度固定,集合长度可变
2、存储类型
数组可以存基本数据类型和引用数据类型;集合可以存引用数据类型,若要存基本数据类型,需要包装类
2.创建集合的对象
1、泛型
限定集合中存储数据的类型
ArrayList<String> list = new ArrayList<String>();
此时我们创建的是ArrayList的对象,而ArrayList是Java已经写好的一个类。这个类在底层做了一些处理,打印对象不是地址值,而是集合中存储数据内容,在展示的时候会拿[ ]把多有的数据进行包裹。
2、ArrayList成员方法
增 boolean add(E e) 添加元素,返回值表示是否添加成功
删 boolean remove(E e) 删除指定元素,返回值表示是否删除成功
E remove(int index) 删除指定索引的元素,返回被删除的元素
改 E set(int index,E e) 修改指定索引下的元素,返回原来的元素
查 E get(int index) 获取指定索引的元素
int size() 获取集合的长度,也就是集合中元素的个数
//增 boolean add(E e) 添加元素,返回值表示是否添加成功
//删 boolean remove(E e) 删除指定元素,返回值表示是否删除成功
// E remove(int index) 删除指定索引的元素,返回被删除的元素
//改 E set(int index,E e) 修改指定索引下的元素,返回原来的元素
//查 E get(int index) 获取指定索引的元素
// int size() 获取集合的长度,也就是集合中元素的个数
public static void main(String[] args) {
//创建集合
ArrayList<String> list = new ArrayList<String>();
//添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
//删除元素
boolean result = list.remove("ddd");
String str = list.remove(0);
//修改元素
String ddd = list.set(0, "ddd");
//查询元素
String s = list.get(0);
//遍历集合
for (int i = 0; i < list.size(); i++) {
String string = list.get(i);
System.out.println(string);
}
System.out.println(s);
System.out.println(ddd);
System.out.println(str);
System.out.println(result);
System.out.println(list);
}
3、基本数据类型对应的包装类
1、byteByte
2、shortShort
3、charCharacter
4、intInteger
5、longLong
6、floatFloat
7、doubleDouble
8、booleanBoolean
4、集合遍历
//定义一个集合,添加字符串,并进行遍历
//遍历格式参照:[元素1,元素2,元素3]
public static void main(String[] args) {
//定义集合
ArrayList<String> list = new ArrayList<>();
//添加元素
list.add("我是谁?");
list.add("我从哪里来?");
list.add("我要到哪里去?");
//遍历集合
System.out.print("[");
for (int i = 0; i < list.size(); i++) {
if (i != list.size() - 1) {
System.out.print(list.get(i) + ",");
} else {
System.out.print(list.get(i));
}
}
System.out.println("]");
}
//定义一个集合,添加数字,并进行遍历
//遍历格式参照:[元素1,元素2,元素3]
public static void main(String[] args) {
//定义集合
ArrayList<Integer> list = new ArrayList<>();
//添加数字
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
//遍历集合
System.out.print("[");
for (int i = 0; i < list.size(); i++) {
if (i != list.size() - 1) {
System.out.print(list.get(i) + ",");
} else {
System.out.print(list.get(i));
}
}
System.out.println("]");
}
5、代码演示
(1)遍历学生对象1.0
public class Student {
//定义成员变量
private String name;
private int age;
//定义空参构造和带参构造
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//定义成员变量的get和set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class StudentTest {
//添加学生对象,并遍历
//定义一个集合,添加一些学生对象,并进行遍历
//学生类的属性为:姓名、年龄
public static void main(String[] args) {
//创建学生对象
Student stu1 = new Student("刘备", 20);
Student stu2 = new Student("关羽", 19);
Student stu3 = new Student("张飞", 18);
//定义集合
ArrayList<Student> students = new ArrayList<>();
//添加学生对象
students.add(stu1);
students.add(stu2);
students.add(stu3);
//遍历集合
for (int i = 0; i < students.size(); i++) {
System.out.print(students.get(i).getName());
System.out.println(students.get(i).getAge());
}
}
}
(2)遍历学生对象2.0
public class Student {
//定义成员变量
private String name;
private int age;
//定义空参构造和带参构造
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//定义成员变量的get和set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class StudentTest {
//添加学生对象,并遍历
//定义一个集合,添加一些学生对象,并进行遍历
//学生类的属性为:姓名、年龄
//对象的数据来自键盘录入
public static void main(String[] args) {
//定义集合
ArrayList<Student> students = new ArrayList<>();
//创建学生对象,键盘录入学生对象的数据
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
//键盘录入信息
System.out.print("请输入第" + (i + 1) + "位学生的姓名:");
String name = sc.next();
System.out.print("请输入第" + (i + 1) + "位学生的年龄:");
int age = sc.nextInt();
//创建学生对象
Student student = new Student();
//设置学生信息
student.setName(name);
student.setAge(age);
//添加学生对象进入数组
students.add(student);
}
//遍历集合
for (int i = 0; i < students.size(); i++) {
System.out.print(students.get(i).getName());
System.out.println(students.get(i).getAge());
}
}
}
3.练习
1、添加用户对象并判断是否存在
(1)需求:main方法中定义一个集合,存入三个用户对象。用户属性为:id,username,password 定义一个方法,根据id查找对应的用户信息。如果存在,返回true;如果不存在,返回false。
(2)参考答案
public class User {
//定义成员变量
private String id;
private String username;
private String password;
//定义空参构造和带参构造
public User() {
}
public User(String id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
//定义成员变量的get和set方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//定义成员方法,根据id判断用户是否存在
//形参idString为要判断的用户id
public boolean judge(String idString) {
if (idString.equals(this.id)) {
return true;
} else {
return false;
}
}
}
public class UserTest {
//添加用户对象并判断是否存在
//main方法中定义一个集合,存入三个用户对象
//用户属性为:id,username,password
//定义一个方法,根据id查找对应的用户信息
//如果存在,返回true;如果不存在,返回false
public static void main(String[] args) {
//定义用户对象集合
ArrayList<User> users = new ArrayList<>();
//添加用户对象
users.add(new User("lb001", "刘备", "lb100"));
users.add(new User("gy002", "关羽", "gy200"));
users.add(new User("zf003", "张飞", "zf300"));
//键盘录入要查询的id
Scanner sc = new Scanner(System.in);
System.out.print("请输入您要查找的用户id:");
String id = sc.next();
//调用方法getUserInfo,打印结果
System.out.println("该用户是否存在:" + getUserInfo(users, id));
}
//定义方法getUserInfo,根据id查找对应的用户信息
public static boolean getUserInfo(ArrayList<User> cobber, String id) {
//定义变量flag,记录判断结果,默认存在
boolean flag = true;
for (int i = 0; i < cobber.size(); i++) {
//调用成员方法judge,判断用户是否存在
flag = cobber.get(i).judge(id);
if (flag) {
System.out.println("用户id为:" + cobber.get(i).getId());
System.out.println("用户名为:" + cobber.get(i).getUsername());
System.out.println("用户密码为:" + cobber.get(i).getPassword());
break;
}
}
if (!flag) {
System.out.println("该用户不存在!!!");
}
return flag;
}
}
2、手机信息
(1)需求:定义JavaBean类:Phone。 Phone属性:品牌、价格。 main方法中定义一个集合,存入三个手机对象。 分别为:小米,1000;苹果,8000;锤子,2999。 定义一个方法,将价格低于3000的手机信息返回。
(2)参考答案
public class Phone {
//定义成员变量
private String brand;
private int price;
//定义空参构造和带参构造
public Phone() {
}
public Phone(String brand, int price) {
this.brand = brand;
this.price = price;
}
//定义成员变量的get和set方法
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
public class PhoneTest {
//定义JavaBean类:Phone
//Phone属性:品牌、价格
//main方法中定义一个集合,存入三个手机对象
//分别为:小米,1000;苹果,8000;锤子,2999
//定义一个方法,将价格低于3000的手机信息返回
public static void main(String[] args) {
//定义集合phones,存储手机对象
ArrayList<Phone> phones = new ArrayList<>();
//创建手机对象,存入集合
phones.add(new Phone("小米", 1000));
phones.add(new Phone("苹果", 8000));
phones.add(new Phone("锤子", 2999));
//调用方法getInfo,将价格低于3000的手机信息返回
ArrayList<Phone> phoneList = getInfo(phones, 3000);
for (int i = 0; i < phoneList.size(); i++) {
System.out.println("手机品牌:" + phoneList.get(i).getBrand());
System.out.println("手机价格:" + phoneList.get(i).getPrice());
System.out.println("————————————");
}
}
//定义方法judge,对输入价格做判断
public static int judge(int pricelim) {
//键盘录入指定价格
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入价格上限:");
pricelim = sc.nextInt();
if (pricelim < 0) {
System.out.println("违规输入,请重新输入!!!");
} else {
break;
}
}
return pricelim;
}
//定义方法getInfo,获取低于指定价格的手机信息
public static ArrayList<Phone> getInfo(ArrayList<Phone> phone, int price) {
//调用方法judge,对价格进行判断
price = judge(price);
//定义集合result,存储符合要求的手机对象
ArrayList<Phone> result = new ArrayList<>();
//遍历集合
//定义变量count,记录符合要求的手机个数
int count = 0;
for (int i = 0; i < phone.size(); i++) {
if (phone.get(i).getPrice() < price) {
result.add(phone.get(i));
count++;
}
}
if (count == 0) {
System.out.println("暂无符合要求的手机");
}
return result;
}
}
二、学生管理系统
1.需求
采取控制台的方式去书写学生管理系统。
2.分析
1、初始菜单:
"-------------欢迎来到黑马学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
2、学生类:
属性:id、姓名、年龄、家庭住址
3、添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:id唯一
4、删除功能:
键盘录入要删除的学生id,需要满足以下要求:
(1)id存在删除
(2)id不存在,需要提示不存在,并回到初始菜单
5、修改功能:
键盘录入要修改的学生id,需要满足以下要求
(1)id存在,继续录入其他信息
(2)id不存在,需要提示不存在,并回到初始菜单
6、查询功能:
打印所有的学生信息,需要满足以下要求
(1)如果没有学生信息,提示:当前无学生信息,请添加后再查询
(2)如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
id 姓名 年龄 家庭住址
heima001 张三 23 南京
heima002 李四 24 北京
heima003 王五 25 广州
heima004 赵六 26 深圳
3. 业务结构分析
4.参考代码
public class Student {
//定义学生的属性
private String id;
private String name;
private int age;
private String address;
//定义空参构造和带参构造
public Student() {
}
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
//定义所有成员变量的get和set方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
//定义方法existence,判断id是否存在
public int existence(ArrayList<Student> studentArrayList, String id) {
//遍历集合,判断是否存在
for (int i = 0; i < studentArrayList.size(); i++) {
if (id.equals(studentArrayList.get(i).id)) {
return i;
}
}
return -1;
}
}
public class StudentManagement {
public static void main(String[] args) {
//键盘录入功能
Scanner sc = new Scanner(System.in);
//定义集合,存储学生对象
ArrayList<Student> students = new ArrayList<>();
//定义变量flag,记录id是否存在(存在返回其索引,不存在返回-1)
int flag = 0;
loop:
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.print("请输入您的选择:");
String code = sc.next();
//创建学生对象
Student student = new Student();
//根据输入,执行不同的功能
switch (code) {
case "1" -> addStu(students, flag, student, sc);
case "2" -> removeStu(students, flag, student, sc);
case "3" -> modifyStu(students, flag, student, sc);
case "4" -> getStu(students);
case "5" -> {
break loop;
}
default -> System.out.println("没有此选项!!!");
}
}
}
//定义方法addStu,添加学生
public static void addStu(ArrayList<Student> students, int flag, Student student, Scanner sc) {
System.out.print("请输入学生的id:");
String id = sc.next();
//调用方法existence,判断id是否唯一
flag = student.existence(students, id);
//若唯一,则添加;若不唯一,则提示,并回到初始菜单
if (flag == -1) {
System.out.print("请输入学生的姓名:");
String name = sc.next();
System.out.print("请输入学生的年龄:");
int age = sc.nextInt();
System.out.print("请输入学生的家庭住址:");
String address = sc.next();
//添加学生信息
student.setId(id);
student.setName(name);
student.setAge(age);
student.setAddress(address);
students.add(student);
System.out.println("添加成功!!!");
} else {
System.out.println("已存在该学生id!!!");
System.out.println("————————————————");
}
}
//定义方法removeStu,删除学生
public static void removeStu(ArrayList<Student> students, int flag, Student student, Scanner sc) {
System.out.print("请输入学生的id:");
String id = sc.next();
//调用方法existence,判断id是否存在
flag = student.existence(students, id);
//若存在,则删除;若不存在,则提示,并回到初始菜单
if (flag != -1) {
students.remove(flag);
System.out.println("删除成功!!!");
} else {
System.out.println("不存在该学生id!!!");
System.out.println("————————————————");
}
}
//定义方法modifyStu,修改学生信息
public static void modifyStu(ArrayList<Student> students, int flag, Student student, Scanner sc) {
System.out.print("请输入学生的id:");
String id = sc.next();
//调用方法existence,判断id是否存在
flag = student.existence(students, id);
//若存在,则继续录入其他信息;若不存在,则提示,并回到初始菜单
if (flag != -1) {
System.out.print("请输入学生的姓名:");
String name = sc.next();
System.out.print("请输入学生的年龄:");
int age = sc.nextInt();
System.out.print("请输入学生的家庭住址:");
String address = sc.next();
//修改学生信息
student.setId(id);
student.setName(name);
student.setAge(age);
student.setAddress(address);
students.set(flag, student);
} else {
System.out.println("不存在该学生id!!!");
System.out.println("————————————————");
}
}
//定义方法getStu,查询学生信息
public static void getStu(ArrayList<Student> students) {
//如果没有学生信息,则提示;如果有学生信息,则输出
if (students.size() == 0) {
System.out.println("当前无学生信息,请添加后再查询");
} else {
System.out.println("id\t\t\t姓名\t\t年龄\t\t家庭住址");
for (int i = 0; i < students.size(); i++) {
System.out.println(students.get(i).getId() + " " + students.get(i).getName() + " "
+ students.get(i).getAge() + " " + students.get(i).getAddress());
}
}
}
}
三、升级版学生管理系统
1.需求
为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作
2.分析
1、登录界面:
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
2、用户类:
属性:用户名、密码、身份证号码、手机号码
3、注册功能:
(1)用户名需要满足以下要求:
验证要求:用户名唯一;用户名长度必须在3~15位之间;只能是字母加数字的组合,但是不能是纯数字。
(2)密码键盘输入两次,两次一致才可以进行注册。
(3)身份证号码需要验证。
验证要求:长度为18位;不能以0为开头;前17位,必须都是数字;最后一位可以是数字,也可以是大写X或小写x
(4)手机号验证。
验证要求:长度为11位;不能以0为开头;必须都是数字
4、登录功能:
(1)键盘录入用户名
(2)键盘录入密码
(3)键盘录入验证码
(4)验证要求:用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册;判断验证码是否正确,如不正确,重新输入;再判断用户名和密码是否正确,有3次机会
5、忘记密码:
(1)键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
(2)键盘录入身份证号码和手机号码
(3)判断当前用户的身份证号码和手机号码是否一致,如果一致,则提示输入密码,进行修改。如果不一致,则提示:账号信息不匹配,修改失败。
6、验证码规则:长度为5;由4位大写或者小写字母和1位数字组成,同一个字母可重复;数字可以出现在任意位置,比如:aQa1K
3.业务总体结构分析
4.注册业务分析
5.登录业务分析
6.修改密码业务分析
7.参考代码
public class User {
//定义用户的属性
private String username;
private String password;
private String idNumber;
private String phoneNum;
//定义空参构造和带参构造
public User() {
}
public User(String username, String password, String idNumber, String phoneNum) {
this.username = username;
this.password = password;
this.idNumber = idNumber;
this.phoneNum = phoneNum;
}
//定义成员变量的get和set方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getIdNumber() {
return idNumber;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
}
public class UserLogin {
public static void main(String[] args) {
//键盘录入功能0
Scanner sc = new Scanner(System.in);
//定义集合users,存储已经注册的用户
ArrayList<User> users = new ArrayList<>();
//登录界面
loop:
while (true) {
System.out.println("————————————————");
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码 4退出");
System.out.println("请输入您的选择:");
String code = sc.next();
//根据不同的选项,进入不同的功能
switch (code) {
case "1" -> {
if (Login(users, sc)) {
break loop;
}
}
case "2" -> register(users, sc);
case "3" -> forgetPass(users, sc);
case "4" -> {
System.out.println("谢谢使用,再见");
System.exit(0);
}
case "5" -> getUserInfo(users);
default -> System.out.println("没有此选项!!!");
}
}
}
//定义方法getUserInfo,获取所有用户的信息
public static void getUserInfo(ArrayList<User> users) {
System.out.println("用户名\t\t密码\t\t身份证号\t\t手机号");
for (int i = 0; i < users.size(); i++) {
System.out.println(users.get(i).getUsername() + "\t\t" + users.get(i).getPassword() + "\t\t" +
users.get(i).getIdNumber() + "\t\t" + users.get(i).getPhoneNum());
}
}
//判断用户是否注册,即是否存在,若存在,返回其索引
public static int exist(ArrayList<User> users, String username) {
for (int i = 0; i < users.size(); i++) {
if (username.equals(users.get(i).getUsername())) {
return i;
}
}
return -1;
}
//生成验证码功能
public static String getVerifyCode() {
//生成随机数功能
Random r = new Random();
//定义集合letter,存储大写字母和小写字母
ArrayList<Character> letter = new ArrayList<>();
for (int i = 0; i < 26; i++) {
letter.add((char) (i + 65));
letter.add((char) (i + 97));
}
//创建StringBuilder对象verifyCode,用于存储验证码
StringBuilder verifyCode = new StringBuilder();
//生成随机索引,获取4位大写或者小写字母,同一个字母可重复
for (int i = 0; i < 4; i++) {
int index = r.nextInt(letter.size());
verifyCode.append(letter.get(index));
}
//生成随机数,加入字符串容器
verifyCode.append(r.nextInt(10));
//将字符串容器转为字符数组
char[] verifyCodeArr = verifyCode.toString().toCharArray();
//将容器中的数据顺序打乱
//定义变量index,记录随机索引
int index = r.nextInt(verifyCodeArr.length);
//定义中间变量temp,记录最后一位数字
char temp = verifyCodeArr[verifyCodeArr.length - 1];
verifyCodeArr[verifyCodeArr.length - 1] = verifyCodeArr[index];
verifyCodeArr[index] = temp;
//将数组中的数据拼接为字符串,并返回
return new String(verifyCodeArr);
}
//登录功能
public static boolean Login(ArrayList<User> users, Scanner sc) {
//定义变量flag,记录是否登录成功,默认不成功
boolean flag = false;
loop:
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
//调用方法exist,判断用户名是否注册,并记录其索引index
int index = exist(users, username);
if (index != -1) {
while (true) {
//调用方法getVerifyCode,生成随机验证码verifyCodeR
String verifyCodeR = getVerifyCode();
System.out.println("验证码为:" + verifyCodeR);
System.out.println("请输入验证码:");
String verifyCode = sc.next();
//判断验证码是否正确,忽略大小写
if (verifyCode.equalsIgnoreCase(verifyCodeR)) {
//判断用户名和密码是否正确
if (username.equals(users.get(index).getUsername()) && password.equals(users.get(index).getPassword())) {
flag = true;
System.out.println("登录成功!!!");
break loop;
} else {
if (i == 2) {
System.out.println("当前账号已被锁定,请联系管理员!!!");
break loop;
} else {
System.out.println("用户名或密码错误,请重新输入!!!");
System.out.println("您还有" + (2 - i) + "次机会");
break;
}
}
} else {
System.out.println("验证码错误!!!");
}
}
} else {
System.out.println("用户名未注册,请先注册");
}
}
return flag;
}
//注册功能
public static void register(ArrayList<User> users, Scanner sc) {
//创建用户对象user
User user = new User();
//验证用户名
while (true) {
System.out.println("用户名长度,必须在3~15位之间");
System.out.println("用户名只能是字母加数字的组合,但不能是纯数字");
System.out.println("请输入用户名:");
String username = sc.next();
//定义变量userFlag,记录用户名输入是否正确,默认正确
boolean nameFlag = true;
//调用方法exist,验证用户名是否唯一,并记录其索引index
int index = exist(users, username);
if (index == -1) {
//验证用户名长度,必须在3~15位之间
if (username.length() >= 3 && username.length() <= 15) {
//验证用户名格式,只能是字母加数字的组合,但不能是纯数字
//定义变量numDigit,记录用户名中数字的个数
int numDigit = 0;
for (int i = 0; i < username.length(); i++) {
//定义变量c,记录用户名的每一个字符
char c = username.charAt(i);
//判断是否是纯数字
if (c >= 48 && c <= 57) {
numDigit++;
} else if (c < 65 || (c > 90 && c < 97) || c > 122) {
//判断是否是字母加数字的组合
nameFlag = false;
System.out.println("用户名格式错误,请重新输入!!!");
break;
}
}
if (numDigit == username.length()) {
nameFlag = false;
System.out.println("用户名格式错误,请重新输入!!!");
}
//验证用户名输入正确,将其赋值给user对象
if (nameFlag) {
user.setUsername(username);
break;
}
} else {
System.out.println("用户名长度错误,请重新输入!!!");
}
} else {
System.out.println("该用户名已存在!!!");
}
}
//验证密码
while (true) {
System.out.println("请输入您的密码:");
String password1 = sc.next();
System.out.println("请再次输入您的密码:");
String password2 = sc.next();
//两次密码一致才可以进行注册
if (password1.equals(password2)) {
user.setPassword(password2);
break;
} else {
System.out.println("两次密码输入不一致,请重新输入!!!");
}
}
//验证身份证号码
while (true) {
System.out.println("请输入您的身份证号码:");
String idNumber = sc.next();
//定义变量idFlag,记录身份证号码输入是否正确,默认正确
boolean idFlag = true;
//验证身份证号码长度,长度为18位
if (idNumber.length() == 18) {
//验证身份证号码是否以0为开头
if (idNumber.charAt(0) != '0') {
//验证身份证号码前17位是否都为数字
for (int i = 0; i < idNumber.length() - 1; i++) {
if (idNumber.charAt(i) < 48 || idNumber.charAt(i) > 57) {
idFlag = false;
System.out.println("身份证号码输入有误,请重新输入!!!");
break;
}
}
//验证最后一位可以是数字,也可以是大写X或小写x
if (idFlag) {
//定义变量lastId,记录身份证号码最后一位
char lastId = idNumber.charAt(idNumber.length() - 1);
if ((lastId >= 48 && lastId <= 57) || lastId == 88 || lastId == 120) {
user.setIdNumber(idNumber);
break;
} else {
System.out.println("身份证号码输入有误,请重新输入!!!");
}
}
} else {
System.out.println("身份证号码输入有误,请重新输入!!!");
}
} else {
System.out.println("身份证号码输入有误,请重新输入!!!");
}
}
//验证手机号
while (true) {
System.out.println("请输入您的手机号码:");
String phoneNum = sc.next();
//定义变量phoneFlag,记录身份证号码输入是否正确,默认正确
boolean phoneFlag = true;
//验证手机号长度,长度为11位
if (phoneNum.length() == 11) {
//验证手机号是否以0为开头
if (phoneNum.charAt(0) != '0') {
//验证手机号是否都为数字
for (int i = 0; i < phoneNum.length(); i++) {
if (phoneNum.charAt(i) < 48 || phoneNum.charAt(i) > 57) {
phoneFlag = false;
System.out.println("手机号码输入有误,请重新输入!!!");
break;
}
}
//验证用户名输入正确,将其赋值给user对象
if (phoneFlag) {
user.setPhoneNum(phoneNum);
//将新注册的用户加入用户集合
users.add(user);
break;
}
} else {
System.out.println("手机号码输入有误,请重新输入!!!");
}
} else {
System.out.println("手机号码输入有误,请重新输入!!!");
}
}
}
//忘记密码功能
public static void forgetPass(ArrayList<User> users, Scanner sc) {
System.out.println("请输入用户名:");
String username = sc.next();
//调用方法exist,判断当前用户名是否存在,如不存在,直接结束方法,并提示;存在记录其索引index
int index = exist(users, username);
if (index != -1) {
System.out.println("请输入身份证号:");
String idNumber = sc.next();
System.out.println("请输入手机号:");
String phoneNum = sc.next();
//判断当前用户的身份证号码和手机号码是否一致
if ((users.get(index).getIdNumber().equalsIgnoreCase(idNumber)) && (users.get(index).getPhoneNum().equals(phoneNum))) {
//如果一致,则提示输入密码,进行修改
while (true) {
System.out.println("请输入您的新密码:");
String password1 = sc.next();
System.out.println("请再次输入您的新密码:");
String password2 = sc.next();
if (password1.equals(password2)) {
users.get(index).setPassword(password2);
System.out.println("密码修改成功!!!");
break;
} else {
System.out.println("两次密码输入不一致,请重新输入!!!");
}
}
} else {
// 如果不一致,则提示
System.out.println("账号信息不匹配,修改失败!!!");
}
} else {
System.out.println("用户未注册!!!");
}
}
}
总结
在了解了集合的基础知识后,一定要自己独立动手练习代码,为以后的进阶打好基础。一定要经常练习,只学习理论是远远不够的。这一节中的学生管理系统与升级版可以自己独立编写一下,借以巩固之前所学的知识。