基础版本:
需求:采取控制台的方式去书写学生管理系统。
分析:
(1)、初始菜单:
(2)、学生类:
属性:id、姓名、年龄、家庭住址。
(3)、添加功能:
键盘录入每一个学生信息并添加,满足以下要求:id唯一。
(4)、删除功能:
键盘录入要删除的学生id,需要满足以下要求:
id存在删除。
id不存在,需要提示不存在,并回到初始菜单。
(5)、修改功能:
键盘录入要修改的学生id,需要满足以下要求:
id存在,继续录入其他信息。
id不存在,需要提示不存在,并回到初始菜单。
(6)、查询功能:
打印所有的学生信息,满足以下要求:
如果没有学生信息,提示:当前无学生信息,请添加后再查询。
如果有学生信息,需要按照以下格式输出。(不用过于纠结对其的问题)
package XSGL;
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;
}
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;
}
}
package XSGL;
import java.util.ArrayList;
import java.util.Scanner;
public class Dome {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
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:退出");
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的选择:");
String choose = sc.next();
switch (choose){
case "1": {addStudent(list); break;}
case "2": {deleteStudent(list); break;}
case "3": {updateStudent(list); break;}
case "4": {searchStudent(list); break;}
case "5": {
System.out.println("退出");
//break loop; //程序结束方法1:利用标记,然后break会跳出标记的循环
System.exit(0); //程序结束方法2:利用此语句停止虚拟机运行
}
default: System.out.println("没有这个选项");
}
}
}
//添加学生
public static void addStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
String id = null;
while (true) {
System.out.println("请输入学生的id");
id = sc.next();
boolean flag = contions(list,id);
if(flag){
System.out.println("id已经存在");
} else {
break;
}
}
System.out.println("请输入学生的名字");
String name = sc.next();
System.out.println("请输入学生的年龄");
int age = sc.nextInt();
System.out.println("请输入学生的家庭住址");
String address = sc.next();
Student stu1 = new Student(id,name,age,address);
list.add(stu1);
System.out.println("学生信息添加成功");
}
//删除学生
public static void deleteStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的学生的id");
String uid = sc.next();
//获取查询的id在集合中对应的索引
int index = getIndex(list,uid);
if(index >= 0){
list.remove(index); //删除索引所对应的集合的元素
System.out.println("id为" + uid + "的学生删除成功");
} else {
System.out.println("id不存在,删除失败");
}
}
//修改学生
public static void updateStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
String uid = null;
System.out.println("请输入要修改的学生的id");
uid = sc.next();
//获取查询的id在集合中对应的索引
int index = getIndex(list,uid);
if(index == -1){
System.out.println("要修改的id" + uid + "不存在");
return ;
}
//代码执行到这的时候,说明要修改的id是存在的
Student stu = list.get(index);
System.out.println("请输入新的名字");
String newName = sc.next();
stu.setName(newName);
System.out.println("请输入新的年龄");
int newAge = sc.nextInt();
stu.setAge(newAge);
System.out.println("请输入新的家庭地址");
String newAdress = sc.next();
stu.setAddress(newAdress);
System.out.println("学生信息修改成功");
}
//查询学生
public static void searchStudent(ArrayList<Student> list){
if(list.size() == 0){
System.out.println("当前无学生信息,请添加后再查询");
return ;
}
//打印表头信息
System.out.println("id\t\t姓名\t\t年龄\t\t家庭住址");
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
System.out.println(s.getId() + "\t\t" + s.getName() + "\t\t" +s.getAge() + "\t\t" + s.getAddress());
}
}
//判断id是否已经存在
public static boolean contions(ArrayList<Student> list,String id){
// for (int i = 0; i < list.size(); i++) {
// Student stu2 = list.get(i);
// String uid = stu2.getId();
// if(uid.equals(id)){
// return true;
// }
// }
// return false;
return getIndex(list,id) >= 0;
}
//通过id获取对应的索引
public static int getIndex(ArrayList<Student> list,String id){
for (int i = 0; i < list.size(); i++) {
Student stu2 = list.get(i);
String uid = stu2.getId();
if(uid.equals(id)){
return i;
}
}
return -1;
}
}
升级版本:
需求:
为学生管理系统书写一个登录、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
分析:
(1)、登录界面:
(2)、用户类:
属性:用户名、密码、身份证号码、手机号码。
(3)、注册功能:
1、用户名需要满足以下要求:
验证要求:
用户名唯一
(分析:Scanner键盘录入用户名username,先到list集合中判断是否存在 contains / getindex)
用户名长度必须在3~15位之间
(分析:可以利用字符串的length() )
只能是字母加数字的组合,但是不能是纯数字
(分析:先循环获取username里面的每个字符,如果有一个字符不在 'a'~'z' 'A'~'Z' '0'~'9',那么当前用户名不符合条件。统计一下用户名username当中有多少个字符在 a-z A-Z ,判断一下个数,只有大于0才是满足要求的用户名)
2、密码键盘输入两次,两次一致才可以进行注册。
(分析:利用Scanner第一次输入密码,利用Scanner第二次输入密码,只有两次一致,才是符合要求的,否则就不符合要求。)
3、身份证号需要验证。
验证要求:
长度为18位
(分析:键盘录入身份证号码,调用字符串里面的 length() 方法获取长度,只有长度为18的时候才满足)
不能以0为开头
(分析:可以调用 charAt(0) 获取第一个字符,跟 '0' 进行比较)
前17位,必须都是数字
(分析:遍历前面17位,如果有一个不在 '0'~'9' 这个范围当中,那么就是不符合的)
最后一位可以是数字,也可以是大写X或小写x
(分析:获取最后一个字符,如果这个字符在 '0'~'9' 之间或者 'X' 或者 'x' 那么就满足)
4、手机号验证。
验证要求:
长度为11位
(分析:键盘录入手机号码,调用字符串里面的 length() 方法获取长度)
不能以0为开头
(分析:可以调用 charAt(0) 与 '0' 进行比较)
必须都是数字
(分析:遍历手机号码,如果有一个字符不在 '0'~'9' 那么就是不行的)
分析:写完之后将属性添加到用户当中,然后把用户添加到集合当中。
User u = new User(username,password,personid,phoneNumber);
list.add(u);
(4)、登录功能:
1、键盘录入用户名
2、键盘录入密码
3、键盘录入验证码(分析:需要先获取一个验证码)
验证要求:
用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册。
判断验证码是否正确,如果不正确,请重新输入。
再判断用户名和密码是否正确,有3次机会。
(分析:先判断用户名是否存在,如果不存在,直接提示未注册。既然用户名存在,那么久判断密码和验证码是否正确,如果正确登陆成功,如果错误会有三次机会。)
(5)、忘记密码:
1、键盘录入用户名,判断当前用户是否存在,如果不存在直接结束方法,并提示:未注册。
(分析:键盘录入用户名,判断是否存在,不存在直接提示未注册。)
2、键盘录入身份证号码和手机号码。
(分析:当代码执行到第二步,就表明用户名是存在的。此时才能键盘录入身份证号码和手机号码)
3、判断当前用户的身份证号码和手机号码是否一致。
如果一致,则提示输入密码,并进行修改。
如果不一致,则提示:账号信息不匹配,修改失败。
(分析:判断身份证号码和手机号码是否正确,如果错误则修改失败,如果正确,才让用户继续键盘录入密码,提示修改成功。)
(6)、验证码规则:
长度为5
由4位大写或者小写字母和1位数字组成,同一个字母可重复。
数字可以出现在任意位置。
package XSGLSJB;
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;
}
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;
}
}
package XSGLSJB;
import java.util.ArrayList;
import java.util.Scanner;
public class Dome {
public static void startDome() {
ArrayList<Student> list = new ArrayList<>();
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:退出");
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的选择:");
String choose = sc.next();
switch (choose){
case "1": {addStudent(list); break;}
case "2": {deleteStudent(list); break;}
case "3": {updateStudent(list); break;}
case "4": {searchStudent(list); break;}
case "5": {System.out.println("退出");
//break loop; //程序结束方法1:利用标记,然后break会跳出被标记的循环
System.exit(0); //程序结束方法2:利用此语句停止虚拟机运行
}
default: System.out.println("没有这个选项");
}
}
}
//添加学生
public static void addStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
String id;
while (true) {
System.out.println("请输入学生的id");
id = sc.next();
boolean flag = contions(list,id);
if(flag){
System.out.println("id已经存在");
} else {
break;
}
}
System.out.println("请输入学生的名字");
String name = sc.next();
System.out.println("请输入学生的年龄");
int age = sc.nextInt();
System.out.println("请输入学生的家庭住址");
String address = sc.next();
Student stu1 = new Student(id,name,age,address); //把学生的属性,添加到学生对象当中
list.add(stu1); //把学生对象添加到集合当中
System.out.println("学生信息添加成功");
}
//删除学生
public static void deleteStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的学生的id");
String uid = sc.next();
//获取查询的id在集合中对应的索引
int index = getIndex(list,uid);
if(index >= 0){ //索引的值大于等于0,代表该id在集合中是存在的
list.remove(index); //根据索引,删除索引所对应的集合中的对象
System.out.println("id为" + uid + "的学生删除成功");
} else {
System.out.println("id不存在,删除失败");
}
}
//修改学生
public static void updateStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
String uid;
System.out.println("请输入要修改的学生的id");
uid = sc.next();
//获取查询的id在集合中对应的索引
int index = getIndex(list,uid);
if(index == -1){
System.out.println("要修改的id" + uid + "不存在");
return ;
}
//代码执行到这的时候,说明要修改的id是存在的
Student stu = list.get(index); //根据索引,获得集合中对应的Student对象
System.out.println("请输入新的名字");
String newName = sc.next();
stu.setName(newName);
System.out.println("请输入新的年龄");
int newAge = sc.nextInt();
stu.setAge(newAge);
System.out.println("请输入新的家庭地址");
String newAdress = sc.next();
stu.setAddress(newAdress);
System.out.println("学生信息修改成功");
}
//查询学生
public static void searchStudent(ArrayList<Student> list){
if(list.size() == 0){
System.out.println("当前无学生信息,请添加后再查询");
return ;
}
//打印表头信息
System.out.println("id\t\t姓名\t\t年龄\t\t家庭住址");
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
System.out.println(s.getId() + "\t\t" + s.getName() + "\t\t" +s.getAge() + "\t\t" + s.getAddress());
}
}
//判断id是否已经存在,true表示存在
public static boolean contions(ArrayList<Student> list,String id){
// for (int i = 0; i < list.size(); i++) {
// Student stu2 = list.get(i);
// String uid = stu2.getId();
// if(uid.equals(id)){
// return true;
// }
// }
// return false;
return getIndex(list,id) >= 0;
}
//通过id获取对应的索引,返回值为对应的索引
public static int getIndex(ArrayList<Student> list,String id){
for (int i = 0; i < list.size(); i++) {
Student stu2 = list.get(i);
String uid = stu2.getId();
if(uid.equals(id)){
return i;
}
}
return -1;
}
}
package XSGLSJB;
public class User {
private String username;
private String password;
private String personid;
private String phoneNumber;
public User() {
}
public User(String username, String password, String personid, String phoneNumber) {
this.username = username;
this.password = password;
this.personid = personid;
this.phoneNumber = phoneNumber;
}
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 getPersonid() {
return personid;
}
public void setPersonid(String personid) {
this.personid = personid;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
package XSGLSJB;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
while (true) {
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作:1 登录 2 注册 3 忘记密码 4 退出");
Scanner sc = new Scanner(System.in);
String choose = sc.next();
switch (choose){
case "1" :login(list); break; //直接输入方法名,然后alt+回车可直接生成方法
case "2" :zhuce(list); break;
case "3" :forgetpassword(list); break;
case "4" :System.out.println("退出"); System.exit(0);
default: System.out.println("没有此选项");
}
}
}
//忘记密码
private static void forgetpassword(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = sc.next();
//判断用户名是否存在
boolean flag5 = contains(list,userName);
if(!flag5){
System.out.println("未注册,请先注册");
return;
}
//键盘录入身份证号和手机号
System.out.println("请输入身份证号:");
String userID = sc.next();
System.out.println("请输入手机号:");
String userPhone = sc.next();
//需要把用户对象先通过索引取出来
int index = getindex(list,userName); //根据输入用户名获得对应的索引
User user = list.get(index); //根据索引获得用户对象
if(!(user.getPersonid().equalsIgnoreCase(userID) && user.getPhoneNumber().equals(userPhone))){
System.out.println("身份证号或手机号错误,不能修改密码");
return;
}
//代码到这里的时候,说明可以修改密码了
String mima;
while (true) {
System.out.println("请输入新的密码:");
mima = sc.next();
System.out.println("请再次输入新的密码:");
String mima2 = sc.next();
if(mima.equals(mima2)){
//System.out.println("两次输入密码一致");
break;
} else {
System.out.println("两次密码输入不一致,请重新输入密码");
continue;
}
}
//直接修改即可
user.setPassword(mima);
System.out.println("修改密码成功");
}
//登录
private static void login(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
for (int i = 0 ; i < 3 ; i++) { //因为登录有3次机会,所以利用了for循环
System.out.println("请输入用户名:");
String userName = sc.next();
//判断用户名是否存在
boolean flag5 = contains(list,userName);
if(!flag5){
System.out.println("未注册,请先注册");
return;
}
//代码到这,说明用户名存在,需要输入密码
System.out.println("请输入密码");
String password = sc.next();
while (true) {
//让用户输入验证码
String rightCode = getCode();
System.out.println("当前验证码为:" + rightCode);
System.out.println("请输入验证码:");
String code = sc.next();
if(code.equalsIgnoreCase(rightCode)){
//System.out.println("验证码输入正确");
break;
} else {
System.out.println("验证码错误");
continue;
}
}
//验证码已经验证完毕,检测用户名和密码是否正确,集合中是否包含用户名和密码
/**封装思想的应用,
* 我们可以把一些零散的数据,封装成一个对象,
* 以后传递参数的时候,只要传递一个整体就可以了,不需要管这些零散的数据
*/
User useInfo = new User(userName,password,null,null);
boolean flag6 = checkUserInfo(list,useInfo);
if(flag6){
//true为存在,登录成功
System.out.println("登录成功,可以开始使用学生管理系统了");
/**创建对象调用方法,启动学生管理系统
* 创建Dome类的对象,然后调用Dome中的startDome方法,
* 和创建User类对象,调用User中的getUsername()等方法,原理是一样的
*/
Dome dd = new Dome(); //创建对象
dd.startDome(); //根据对象,调用相应的方法
break;
} else {
System.out.println("登录失败,用户名或密码错误");
if(i == 2){
System.out.println("当前帐号被锁定,请练习客服");
return; //当前账号被锁定后,直接结束方法即可
} else {
//因为有3次机会,当循环第一次执行时,已经用了一次机会,剩下2次机会,此时i的值为0,
//所以输出剩下 2-i 次机会, 模板:剩余 ( n-1 - i ) 次机会
System.out.println("剩下" + (2 - i) + "次机会");
}
}
}
}
//注册
public static void zhuce(ArrayList<User> list){
//键盘录入用户名
Scanner sc = new Scanner(System.in);
/**开发细节:
* 先验证格式是否正确,再验证是否唯一
* 因为在以后所有的数据,都是存在数据库中,如果我们要校验,需要使用到网络资源。
*/
//用户名输入
String inName; //如果inName定义在循环里面,它的作用只能是循环内,不方便直接添加到用户当中。
while (true) {
System.out.println("请输入用户名:");
inName = sc.next();
boolean flag1 = checkUsername(inName); //检验用户名格式是否正确
if(!flag1){
System.out.println("格式不正确,请重新输入");
continue;
}
//代码执行到这时,表明用户名格式正确,接下来判断是否唯一
//判断username在集合中是否已经存在
boolean flag2 = contains(list,inName);
if(flag2){
//true,用户名存在
System.out.println("用户名已经存在,请重新输入用户名");
continue;
} else {
//false,用户名不存在
//System.out.println("用户名可以使用");
break; //用户名可以使用时,不需要再输入,利用break跳出while循环,不再输入
}
}
//密码输入
String inmima1;
while (true) {
System.out.println("请输入密码:");
inmima1 = sc.next();
System.out.println("请再次输入密码:");
String inmima2 = sc.next();
if(!inmima1.equals(inmima2)){
System.out.println("两次密码输入不一致,请重新输入");
continue;
} else{
//System.out.println("两次密码输入一致,请输入其他数据");
break;
}
}
//身份证号码录入
String inpersonID;
while (true) {
System.out.println("请输入身份证号");
inpersonID = sc.next();
boolean flag3 = checkPersonID(inpersonID);
if(flag3){
//System.out.println("身份证号码格式符合要求");
break;
} else {
System.out.println("身份证号码不符合要求,请重新输入");
continue;
}
}
//手机号码录入
String inPhoneNumber;
while (true) {
System.out.println("请输入手机号码:");
inPhoneNumber = sc.next();
boolean flag4 = checkPhoneNumber(inPhoneNumber);
if(flag4){
System.out.println("手机号码格式符合要求");
break;
} else {
System.out.println("手机号码不符合要求,请重新输入");
continue;
}
}
//把用户属性添加到用户当中,进而添加到集合当中
//若户名,密码,身份证号,手机号码都定义在循环内,则无法放到用户对象中
User u = new User(inName,inmima1,inpersonID,inPhoneNumber);
//把用户对象添加到集合中
list.add(u);
System.out.println("注册成功");
//检查是否遍历成功,遍历集合
printlist(list);
}
//定义一个方法,检测该整体在集合中是否存在,true为存在
private static boolean checkUserInfo(ArrayList<User> list, User useInfo) {
//遍历集合,判断用户是否存在,如果存在登录成功,如果不存在登录失败。
for (int i = 0; i < list.size(); i++) {
User uu = list.get(i);
if(uu.getUsername().equals(useInfo.getUsername()) && (uu.getPassword().equals(useInfo.getPassword()))){
return true;
}
}
return false;
}
//打印集合中的内容
private static void printlist(ArrayList<User> list) {
for (int i = 0; i < list.size(); i++) {
User us = list.get(i);
System.out.println(us.getUsername() + "," + us.getPassword() + ","
+ us.getPersonid() + "," + us.getPhoneNumber());
}
}
//判断手机号码格式是否符合要求,true为符合
private static boolean checkPhoneNumber(String inPhoneNumber) {
int len = inPhoneNumber.length();
//判断是否为11位
if(len != 11){
return false;
}
//判断开头是否为0
if(inPhoneNumber.startsWith("0")){
return false;
}
//判断是否都是数字
for (int i = 0; i < inPhoneNumber.length(); i++) {
char c = inPhoneNumber.charAt(i);
if(!(c >= '0' && c <= '9')){
return false;
}
}
return true;
}
//检测身份证号码格式是否符合要求,true为符合要求
private static boolean checkPersonID(String personID) {
//长度为18
if(personID.length() != 18){
return false;
}
//不能以0开头
char startch = personID.charAt(0);
//boolean c = personID.startsWith("9"); //判断字符串第一个元素是否为9
if(startch == '0'){
return false;
}
//前17位必须为数字
for (int i = 0; i < personID.length() - 1 ; i++) {
char c2 = personID.charAt(i);
if(!(c2 >= '0' && c2 <= '9')){
return false;
}
}
//最后一位可以是数字,也可以是X或x
char endch = personID.charAt(personID.length() - 1 );
if(!((endch >= '0' && endch <= '9') || (endch == 'X') || (endch == 'x'))){
return false;
}
return true; //true为格式符合要求
}
//判断用户名在集合中是否已经存在,true为存在
private static boolean contains(ArrayList<User> list,String username) {
for (int i = 0; i < list.size(); i++) {
User u = list.get(i);
String jhname = u.getUsername();
if(username.equals(jhname)){
return true; //表示用户名在集合中已经存在
}
}
return false; //表示用户名在集合中不存在
}
//检测用户名是否符合规范,true为符合规范
private static boolean checkUsername(String username) {
//判断用户名长度为3~15
int len = username.length();
if(len < 3 || len >15){
return false;
}
//当代码执行到这里,表示用户名长度符合要求
//判断用户名格式为字母+数字
for (int i = 0; i < username.length(); i++) {
char c = username.charAt(i);
if(!((c>='a'&&c<='z') ||(c>='A'&&c<='Z')||(c>='0'&&c<='9'))){
return false;
}
}
//当代码执行到这里,表示用户名长度符合要求,而且是字母+数字的组合方式
//判断是否全部为数字,当字母个数大于0时,即可满足要求
int count = 0;
for (int i = 0; i < username.length(); i++) {
char c = username.charAt(i);
if((c>='a'&&c<='z') ||(c>='A'&&c<='Z')){
count++;
break; //if执行时表示已经有字母存在,此时可以直接跳出for循环
}
}
return count >0 ;
}
//根据用户名找出其在集合中的索引,返回值为索引
public static int getindex(ArrayList<User> list,String userName){
for (int i = 0; i < list.size(); i++) {
User u = list.get(i);
String un = u.getUsername();
if(un.equals(userName)){
return i;
}
}
return -1;
}
//生成验证码
private static String getCode(){
//1、创建一个集合,添加所有的大写和小写字母
ArrayList<Character> list = new ArrayList<>();
//往集合内添加英文字母
for (int i = 0; i < 26; i++) {
list.add((char)('a' + i));
list.add((char)('A' + i));
}
//随机抽取4个字符
StringBuilder sb = new StringBuilder(); //创建字符串容器
Random r = new Random();
for (int i = 0; i < 4; i++) {
//获取随机字母
int index = r.nextInt(list.size());
//利用随即索引获取字符
char c = list.get(index);
sb.append(c); //将字符拼接到字符串容器中
}
//把一个随机数字添加到末尾
int number = r.nextInt(10);
sb.append(number);
//调整验证码中数字的位置
/**如果我们要修改字符串中的内容
* 先把字符串变成字符数组,在数组中修改,然后再创建一个新的字符串
*/
String newsb = sb.toString(); //将sb变成字符串newsb
char[] arr = newsb.toCharArray(); //将字符串newsb变成字符数组arr[]
//用最后一个索引与前面的索引随机调换
int randomIndex = r.nextInt(arr.length);
char temp = arr[randomIndex];
arr[randomIndex] = arr[arr.length - 1];
arr[arr.length - 1] = temp;
String result = new String(arr); //将字符数组转化为字符串
return result;
}
}