目录
学生管理系统:
实体类:
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;
}
public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + "}";
}
}
听课前的版本:
public class Management {
public static void main(String[] args) {
ArrayList<Student> list=new ArrayList<>();
System.out.println("-------------欢迎来到黑马学生管理系统----------------");
boolean flag= true;
while (flag) {
System.out.println("1:添加学生");
System.out.println("2:删除学生");
System.out.println("3:修改学生");
System.out.println("4:查询学生");
System.out.println("5:退出");
System.out.println("请输入您的选择:");
try {//这里try-catch,后面再出错统一输出一句话。
int i= new Scanner(System.in).nextInt();
switch (i){
case 1->add(list);
case 2->delete(list);
case 3->change(list);
case 4->show(list);
case 5->flag=false;
default -> System.out.println("没有这个选项");
}
}catch (Exception e){
System.out.println("输入错误!");
}
}
}
private static void add(ArrayList<Student> list){
System.out.println("添加信息:id name age address");
Scanner scanner = new Scanner(System.in);
String id =scanner.next();
for (Student student : list) {
if (student.getId().equals(id)) {
System.out.println("id输入重复!");
return;
}
}
String name=scanner.next();
int age=scanner.nextInt();
String address=scanner.next();
Student student = new Student(id,name,age,address);
list.add(student);
show(list);
}
private static void delete(ArrayList<Student> list){
System.out.println("删除id:");
String id =new Scanner(System.in).next();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)){
System.out.println("id找到");
list.remove(i);
show(list);
return;
}
}
System.out.println("id找不到");
show(list);
}
private static void change(ArrayList<Student> list){
System.out.println("改变id:");
String id =new Scanner(System.in).next();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)){
System.out.println("id找到");
System.out.println("输入添加信息: name age address");
Scanner scanner = new Scanner(System.in);
String name=scanner.next();
int age=scanner.nextInt();
String address=scanner.next();
Student student=new Student(list.get(i).getId(),name,age,address);
list.set(i,student);
show(list);
return;
}
}
System.out.println("id找不到");
show(list);
}
private static void show(ArrayList<Student> list){
System.out.println("--------------------------------");
if (list.isEmpty()) {
System.out.println("没有任何信息");
}else {
System.out.println("id\t姓名\t年龄\t家庭地址");
for (Student student : list) {
System.out.print(student.getId() + '\t' + student.getName() + '\t' + student.getAge() + '\t' + student.getAddress() + '\n');
}
}
System.out.println("--------------------------------");
}
}
听课后的版本(黑马程序员):
在需要改进的地方添加了注释
//添加了两个方法,在完成add功能添加了contains方法判断是否使用了相同id
//在完成delete方法的时候又需要用到id对应的下标来删除,故添加getIndex功能
//这里可以把add功能中原本的代码注释掉,引用getIndex功能减少重复代码。
//先画图再敲代码,或许现在的功能实现简单,不需要,但是后期或许会需要这种习惯
public class Management2 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
System.out.println("-------------欢迎来到黑马学生管理系统----------------");
//使用标号:跳出外层循环---相较于boolean flag设置循环终止条件更加方便高校
loop: while (true) {
System.out.println("1:添加学生");
System.out.println("2:删除学生");
System.out.println("3:修改学生");
System.out.println("4:查询学生");
System.out.println("5:退出");
System.out.println("请输入您的选择:");
try {
int i = new Scanner(System.in).nextInt();
switch (i) {
case 1 -> add(list);
case 2 -> delete(list);
case 3 -> update(list);
case 4 -> show(list);
case 5 -> {
System.out.println("退出系统");
break loop;
//第二种写法:System.exit(0) 或者 return;
}
default -> System.out.println("没有这个选项");
}
} catch (Exception e) {
System.out.println("输入错误!");
}
}
}
private static void add(ArrayList<Student> list) {
Scanner scanner = new Scanner(System.in);
String id = null;
while (true) {
System.out.println("增加学生,输入id:");
id = scanner.next();
if (contains(list,id)){
System.out.println("id重复,重新输入:");
}else {
break;
}
}
System.out.println("依次输入姓名,年龄,住址");
String name = scanner.next();
int age = scanner.nextInt();
String address = scanner.next();
Student student = new Student(id, name, age, address);
list.add(student);
show(list);
}
private static void delete(ArrayList<Student> list){
System.out.println("输入删除对象的id:");
String id = new Scanner(System.in).next();
if(contains(list,id)){
System.out.println("id找到,删除成功");
int i=getIndex(list,id);
list.remove(i);
}
else {
System.out.println("id找不到,删除失败");
}
show(list);
}
private static void update(ArrayList<Student> list) {
System.out.println("输入改变对象的id:");
String id = new Scanner(System.in).next();
if (contains(list,id)){
System.out.println("id找到:");
System.out.println("输入添加信息:姓名,年龄,住址");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
int age = scanner.nextInt();
String address = scanner.next();
int i=getIndex(list,id);
//之前我是创建新对象,再使用set修改的集合,这里直接修改对象内容,更省空间
Student student = list.get(i);
student.setName(name);
student.setAge(age);
student.setAddress(address);
list.set(i, student);
}else {
System.out.println("id找不到,修改失败");
}
show(list);
}
private static void show(ArrayList<Student> list) {
System.out.println("--------------------------------");
if (list.isEmpty()) {
System.out.println("没有任何信息");
} else {
System.out.println("id\t姓名\t年龄\t家庭地址");
for (Student student : list) {
System.out.print(student.getId() + '\t' + student.getName() + '\t' + student.getAge() + '\t' + student.getAddress() + '\n');
}
}
System.out.println("--------------------------------");
}
//判断集合中是否存在该对象id
private static boolean contains(ArrayList<Student> list, String id){
/*for (Student student : list) {
if (student.getId().equals(id)) {
return true;
}
}
return false;*/
if (getIndex(list,id)==-1){
return false;
}else return true;
}
//根据集合的id返回对应下标
private static int getIndex(ArrayList<Student> list, String id){
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getId().equals(id)){
return i;
}
}
return -1;
}
}
登陆系统:
实体类:
public class User {
private String username;
private String password;
private String ID;
private String phoneNumber;
public User() {
}
public User(String username, String password, String ID, String phoneNumber) {
this.username = username;
this.password = password;
this.ID = ID;
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 getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String toString() {
return "User{username = " + username + ", password = " + password + ", ID = " + ID + ", phoneNumber = " + phoneNumber + "}";
}
}
听课前的版本:
//不会使用正则表达式,写起来很繁杂。
public class LoginAndRegister {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
list.add(new User("zhangsan","123456","430945222245647897","18888888888"));
list.add(new User("lisi","654321","430945222245647891","18888888889"));
list.add(new User("wangwu","12345678","430945222245647892","18888888880"));
list.add(new User("zhaoliu","87654321","430945222245647893","18888888881"));
System.out.println("-------------欢迎来到黑马学生管理系统----------------");
loop:while (true) {
System.out.println("请选择操作 1登录 2注册 3忘记密码");
Scanner scanner = new Scanner(System.in);
try {
int i = scanner.nextInt();
switch (i) {
case 1 -> {
if (login(list)) break loop;
}
case 2 -> register(list);
case 3 -> forget(list);
}
}catch (Exception e){
System.out.println(e);
}
}
System.out.println("欢迎登录!");
}
//登录选项
private static boolean login(ArrayList<User> list) {
System.out.println("欢迎登录");
for (int i = 0; i < 3; i++) {
System.out.println("输入用户名:");
Scanner scanner = new Scanner(System.in);
String username = scanner.next();
System.out.println("输入密码:");
String password = scanner.next();
String str = getString();
System.out.println("输入验证码:" + str);
String myStr = scanner.next();
int index = getIndex(list, username);
if (index >= 0) {
if (list.get(index).getPassword().equals(password) && str.equalsIgnoreCase(myStr)) {
System.out.println("用户名密码验证码正确");
return true;
} else {
System.out.println("密码或者验证码错误,请重新输入密码和验证码:还有" + (2 - i) + "次机会");
}
} else {
System.out.println("用户名未注册,请先注册");
return false;
}
}
System.out.println("输入次数已经用完!");
return false;
}
//注册选项
private static void register(ArrayList<User> list) {
System.out.println("欢迎注册");
String username, password1, ID, phoneNumber;
username = inputUsername(list);
password1 = inputPassword();
ID = inputID();
phoneNumber = inputPhoneNumber();
User user = new User(username, password1, ID, phoneNumber);
list.add(user);
}
//输入用户名
private static String inputUsername(ArrayList<User> list) {
String username;
Scanner scanner = new Scanner(System.in);
char[] chars = getChars();
while (true) {
System.out.println("请输入用户名(3-15位字母加数字且不能为纯数字):");
username = scanner.next();
boolean flag1 = false;
for (int i = 0; i < username.length(); i++) {
if (username.charAt(i) > '9' || username.charAt(i) < '0') {
flag1 = true;
break;
}
}
if (flag1==false){
System.out.println("不能为纯数字");
}
boolean flag2 = true;
loop:for (int i = 0; i < username.length(); i++) {
for (int j = 0; j < chars.length; j++) {
if (username.charAt(i) == chars[j]) {
break;
}
if (j == chars.length - 1) {
System.out.println("只能为字母或者数字");
flag2 = false;
break loop;
}
}
}
boolean flag3=true;
if (username.length() < 3 || username.length() > 15) {
System.out.println("用户名长度不符合标准");
flag3 = false;
}
boolean flag4=true;
if (contains(list,username)){
System.out.println("用户名已经存在");
flag4=false;
}
if (flag1 && flag2 && flag3 && flag4) {
System.out.println("用户名正确");
break;
} else {
System.out.println("用户名错误,再次输入:");
}
}
return username;
}
//输入密码:
private static String inputPassword() {
String password1;
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入用密码两次:");
password1 = scanner.next();
String password2 = scanner.next();
if (password1.equals(password2)) {
System.out.println("密码符合要求");
break;
} else {
System.out.println("两次输入密码不一致,重输");
}
}
return password1;
}
//输入身份证号码:
private static String inputID() {
String ID;
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("输入身份证号码:");
ID = scanner.next();
boolean flag1 = true;
if (ID.length() != 18) {
flag1 = false;
System.out.println("身份证长度需要18位");
continue;
}
boolean flag2 = true;
if (ID.charAt(0) == '0') {
flag2 = false;
System.out.println("身份证第一位不能为0!");
}
boolean flag3 = true;
for (int i = 0; i < ID.length() - 1; i++) {
if (ID.charAt(i) < '0' || ID.charAt(i) > '9') {
flag3 = false;
System.out.println("身份证前十七位必须为数字!");
}
}
boolean flag4 = true;
char c = ID.charAt(17);
if ((c>'9'||c<'0')&&c!='x'&&c!='X') {
flag4 = false;
System.out.println("身份证最后一位不是数字也不是X或者x!");
}
if (flag1 && flag2 && flag3 && flag4) {
System.out.println("身份证正确");
break;
} else System.out.println("身份证错误,重输");
}
return ID;
}
//输入电话号码:
private static String inputPhoneNumber() {
String phoneNumber;
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("输入电话号码:");
phoneNumber = scanner.next();
boolean flag1 = true;
if (phoneNumber.length() != 11) {
flag1 = false;
System.out.println("电话号码长度必须为11");
}
boolean flag2 = true;
if (phoneNumber.charAt(0) == '0') {
flag2 = false;
System.out.println("电话号码第一位必须不为0");
}
boolean flag3 = true;
for (int i = 0; i < phoneNumber.length(); i++) {
if (phoneNumber.charAt(i) > '9' || phoneNumber.charAt(i) < '0') {
flag3 = false;
System.out.println("电话号码长度必须全部是数字!");
}
}
if (flag1 && flag2 && flag3) {
System.out.println("电话号码正确");
break;
} else System.out.println("电话号码错误");
}
return phoneNumber;
}
//忘记密码选项
private static void forget(ArrayList<User> list) {
System.out.println("输入用户名:");
Scanner scanner = new Scanner(System.in);
String username = scanner.next();
int index = getIndex(list, username);
if (index >= 0) {
System.out.println("输入身份证和手机号码:");
String ID = scanner.next();
String phoneNumber = scanner.next();
if (list.get(index).getID().equals(ID) && list.get(index).getPhoneNumber().equals(phoneNumber)) {
System.out.println("输入密码进行修改:");
String password = scanner.next();
list.get(index).setPassword(password);
} else {
System.out.println("信息不对,修改失败");
}
} else {
System.out.println("用户名未注册,请先注册");
}
}
//根据用户名返回下标
private static int getIndex(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getUsername().equals(username)) {
return i;
}
}
return -1;
}
//根据用户名判断是否存在于集合中
private static boolean contains(ArrayList<User> list, String username){
if (getIndex(list,username)==-1){
return false;
}else return true;
}
//得到随机字母加数字五位字符串
private static String getString() {
char[] str=new char[5];
Random random = new Random();
char[] chars = getChars();
for (int i = 0; i < 4; i++) {
str[i]=chars[random.nextInt(52)];
}
str[4]=chars[random.nextInt(52,62)];
int i=random.nextInt(5);
char temp=str[4];
str[4]=str[i];
str[i]=temp;
return new String(str);
}
//得到全部字母加数字的字符数组
private static char[] getChars() {
char[] chars = new char[62];//存储字母加数字
for (int i = 0; i < 26; i++) {
chars[i] = (char) ('a' + i);
}
for (int i = 0; i < 26; i++) {
chars[i + 26] = (char) ('A' + i);
}
for (int i = 0; i < 10; i++) {
chars[i + 52] = (char) ('0' + i);
}
return chars;
}
}
听课后的版本(黑马程序员):
//加入打印功能,重构内部代码
public class LoginAndRegister2 {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
list.add(new User("zhangsan", "123456", "888888888888888888", "18888888888"));
list.add(new User("lisi", "654321", "430945222245647891", "18888888889"));
list.add(new User("wangwu", "12345678", "430945222245647892", "18888888880"));
list.add(new User("zhaoliu", "87654321", "430945222245647893", "18888888881"));
System.out.println("-------------欢迎来到黑马学生管理系统----------------");
printList(list);
loop:
while (true) {
System.out.println("请选择操作 1登录 2注册 3忘记密码 4退出");
Scanner scanner = new Scanner(System.in);
try {
int i = scanner.nextInt();
switch (i) {
case 1 -> {
if (login(list)) break loop;
}
case 2 -> register(list);
case 3 -> forgetPassword(list);
case 4 -> {
//这里用System.exit(0)也行,chatGPT说用return好一点:
//在Java中结束主方法建议使用return,而不是System.exit(0)。
//原因是System.exit(0)会直接退出JVM,而不管正在进行的线程是否已经完成,这可能会产生不可预料的结果,比如有些数据还没有被写回文件,或者数据库连接还没有关闭。
//相比之下,return 会让当前线程返回到调用点,JVM 会在所有线程都执行完毕之后自动退出,确保程序可以正常结束而不会导致不必要的问题。
System.out.println("欢迎再来");
return;
}
default -> System.out.println("没有这个选项");
}
} catch (Exception e) {
System.out.println("输入错误!");
}
}
System.out.println("欢迎用户登录!");
}
//选项:注册
private static void register(ArrayList<User> list) {
System.out.println("欢迎注册");
String username, password, ID, phoneNumber;
Scanner scanner = new Scanner(System.in);
//在先前的做法中我的username是直接通过方法来得到的。
//但是老师的做法是通过方法检查username那么是否正确,在这个方法中来录入数。
//先前的做法当中,每一个方法里面都要写scanner,还是老师的方法更好。
//用户名输入与检测,下面四个部分的检测基本上都是if else的逻辑,输入正确停止循环,密码的输入稍微有些不一样(因为那个模块比较简单)
while (true) {
System.out.println("请输入用户名(3-15位字母加数字且不能为纯数字):");
username = scanner.next();
if (!checkUsername(username)) {
continue;
}
if (contains(list, username)) {
System.out.println("已存在该用户名");
continue;
}
break;
}
//密码的输入与检测
while (true) {
System.out.println("请输入用密码两次:");
password = scanner.next();
String password2 = scanner.next();
if (password.equals(password2)) {
System.out.println("密码符合要求");
break;
} else {
System.out.println("两次输入密码不一致,重输");
}
}
//身份证的输入与检测
while (true) {
System.out.println("输入身份证号码:");
ID = scanner.next();
if (checkID(ID)) {
System.out.println("身份证正确");
break;
} else System.out.println("身份证错误,重输");
}
//电话号码的输入与检测
while (true) {
System.out.println("输入电话号码:");
phoneNumber = scanner.next();
if (checkPhoneNumber(phoneNumber)) {
System.out.println("电话号码正确");
break;
} else System.out.println("电话号码错误");
}
//加入集合
User user = new User(username, password, ID, phoneNumber);
list.add(user);
printList(list);
}
//功能:检查用户名
private static boolean checkUsername(String username) {
//1.一般来讲是先验证格式是否正确,再去校验是否唯一:数据一般存储在数据库当中,需要使用网络资源
//我的之前的做法是,全部检验一遍。。。。。
//2.去除flag,使用return用来判断输入,提升效率
//使用变量存储数据提高运行效率
int len = username.length();
if (len < 3 || len > 15) {
System.out.println("用户名长度不符合标准");
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')) {
System.out.println("只能为字母或者数字");
return false;
}
}
for (int i = 0; i < username.length(); i++) {
char c = username.charAt(i);
if (c > 'a' && c < 'z' || c > 'A' && c < 'Z') {
return true;
}
}
System.out.println("不能为纯数字");
return false;
}
//功能:检查身份证
private static boolean checkID(String ID) {
//看看两种不同的写法:这一种returnID的方式的结构更加清晰,主要是面向重点不同
//之前的版本里面重点在于录入,这里的重点在于判断字符串
//之前的版本要创建多个Scanner,这个版本不需要
//之前的版本要创建多个flag判断对错,这个不需要,遇到错误直接return就可以了
// (之前的版本在使用charAt的时候出现了数组越界的错误。但是被我统一try-catch掉了。花了一点时间才发现。)
if (ID.length() != 18) {
System.out.println("身份证长度需要18位");
return false;
}
if (ID.startsWith("0")) {//也可以用charAt,这里是新知识点,是0开头返回true,否则返回false
System.out.println("身份证第一位不能为0!");
return false;
}
for (int i = 0; i < ID.length() - 1; i++) {
if (ID.charAt(i) < '0' || ID.charAt(i) > '9') {
System.out.println("身份证前十七位必须为数字!");
return false;
}
}
char c = ID.charAt(ID.length() - 1);
if ((c > '9' || c < '0') && c != 'x' && c != 'X') {
System.out.println("身份证最后一位不是数字也不是X或者x!");
return false;
}
return true;
}
//功能:检查电话号码
private static boolean checkPhoneNumber(String phoneNumber) {
if (phoneNumber.length() != 11) {
System.out.println("电话号码长度必须为11");
return false;
}
if (phoneNumber.startsWith("0")) {
System.out.println("电话号码第一位必须不为0");
return false;
}
for (int i = 0; i < phoneNumber.length(); i++) {
char c = phoneNumber.charAt(i);
if (c > '9' || c < '0') {
System.out.println("电话号码长度必须全部是数字!");
return false;
}
}
return true;
}
//选项:登录
private static boolean login(ArrayList<User> list) {
//这个模块本来是用户名密码验证码同时判断
System.out.println("欢迎登录");
Scanner scanner = new Scanner(System.in);
System.out.println("输入用户名:");
String username = scanner.next();
int index = getIndex(list, username);
//这里把注册用户提到前面
if (index < 0) {
System.out.println("用户名未注册,请先注册");
return false;
}
for (int i = 0; i < 3; i++) {
System.out.println("输入密码:");
String password = scanner.next();
//判断验证码:验证码错误不减少机会
while (true) {
String str = getString();
System.out.println("输入验证码:" + str);
String myStr = scanner.next();
if (!str.equalsIgnoreCase(myStr)) {
System.out.println("验证码输入错误");
continue;
}
break;
}
if (list.get(index).getPassword().equals(password)) {
System.out.println("用户名密码验证码正确");
return true;
}
System.out.println("密码或者验证码错误,请重新输入密码和验证码:还有" + (2 - i) + "次机会");
}
System.out.println("输入次数已经用完!");
return false;
}
//选项:忘记密码
private static void forgetPassword(ArrayList<User> list) {
System.out.println("输入用户名:");
Scanner scanner = new Scanner(System.in);
String username = scanner.next();
int index = getIndex(list, username);
//先判断错误:再进行接下来的操作:主要是为了避免在if里面的多层嵌套导致代码繁杂
if (index < 0) {
System.out.println("用户名未注册,请先注册");
return;
}
System.out.println("输入身份证和手机号码:");
String ID = scanner.next();
String phoneNumber = scanner.next();
User user = list.get(index);
//在进行身份证号码比较的时候忽略大小写:主要是最后的X的判断不区分大小写
//你可以对比一下,少了if的嵌套循环,代码清晰很多:主要是使用了return返回结束方法。
//这才发现:原来我的if else都写不好。。。。
//重要的一课:if后能尽量免除else减少嵌套(当代码量多的时候)
if (!(user.getID().equalsIgnoreCase(ID) && user.getPhoneNumber().equals(phoneNumber))) {
System.out.println("信息不对,修改失败");
return;
}
String password;
while (true) {
System.out.println("输入密码进行修改:");
password = scanner.next();
System.out.println("再次输入密码进行验证:");
String password2 = scanner.next();
if (password.equals(password2)) {
user.setPassword(password);
System.out.println("密码输入正确,修改完成!");
break;
}
System.out.println("两次密码不一致,重新输入:");
}
}
//功能;根据用户名返回下标
private static int getIndex(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getUsername().equals(username)) {
return i;
}
}
return -1;
}
//功能:根据用户名判断是否存在于集合中
private static boolean contains(ArrayList<User> list, String username) {
return getIndex(list, username) >= 0;
}
//功能;得到随机字母加数字共五位的字符串(一个数字随机位置):
private static String getString() {
/*char[] chars = new char[52];
for (int i = 0; i < 26; i++) {
chars[i] = (char) ('a' + i);
chars[i + 26] = (char) ('A' + i);
}*/
//存储字符:这里使用集合代替数组,空间占用更大一点:不过,意在方便与练习
ArrayList<Character> list = new ArrayList<>();
for (int i = 0; i < 26; i++) {
//同样是循环26次,两个代码可以写道同一行
list.add((char) ('a' + i));
list.add((char) ('A' + i));
}
//老师这里是用的StringBuilder:但是我不知道怎么给最后一位的数字换位置
//老师的方法是把sb转换成String再转换成toCharArray再去调整。觉得有些许麻烦,这里就不改了。
char[] str = new char[5];
Random random = new Random();
for (int i = 0; i < 4; i++) {
//JDK5之后,char与Character可以相互转换,后面会学习
str[i] = list.get(random.nextInt(list.size()));
}
str[4] = (char) ('0' + random.nextInt(10));
//随机数字出现位置
int i = random.nextInt(5);
char temp = str[str.length - 1];
str[str.length - 1] = str[i];
str[i] = temp;
return new String(str);
}
//功能:打印集合
private static void printList(ArrayList<User> list) {
System.out.println("姓名" + '\t' + "密码" + '\t' + "身份证" + '\t' + "手机号");
for (User user : list) {
System.out.println(user.getUsername() + '\t' + user.getPassword() + '\t' + user.getID() + '\t' + user.getPhoneNumber());
}
}
}