目标:
- 提示用户输入注册账号(数字)和密码,如果账号已经存在,提示用户重新输入。
- 登录时提示用户输入登录账号和密码。如果账号和密码已经在集合中,那么登录成功,否则失败。
package video;
/*
实现一个注册和登录功能,
*/
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;
class Person{
int id;
String password;
public Person(int id ,String password){
this.id=id;
this.password=password;
}
public void setId(int id) {
this.id = id;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "账号:"+this.id+" 密码:"+this.password;
}
@Override
public boolean equals(Object obj) {
Person user = (Person) obj;
return this.id==user.id;
}
}
public class TextCollection{
static Collection c= new ArrayList();
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
while (true){
System.out.println("请选择:A注册,B登录,C退出");
String option = scanner.next();
if ("a".equalsIgnoreCase(option)) {
register();
}
else if ("b".equalsIgnoreCase(option)) {
signIn();
}
else if ("c".equalsIgnoreCase(option)) {
break;
}
else {
System.out.println("输入格式错误,请重新输入");
}
}
}
public static void signIn() {
while(true) {//登录,,
System.out.println("请输入登录账号:");
int id = scanner.nextInt();
System.out.println("请输入登录密码:");
String password = scanner.next();
// Person user = new Person(id,password);
Iterator iterator = c.iterator();
boolean flag = false;
while (iterator.hasNext()) {
Person user = (Person) iterator.next();
if (user.id == id && user.password.equals(password)) {//字符串比较一定要用equals,,,
flag = true;
}
}
if (flag) {
System.out.println("登录成功,欢迎....");
break;
} else {
System.out.println("账号或者密码错误,请重新输入");
}
}
}
public static void register() {
while (true){ //注册
System.out.println("请输入注册账号:");
int id = scanner.nextInt();
Person user = new Person(id,null);
if (c.contains(user)) {
System.out.println("此账号已存在,请重新输入");
}
else {
System.out.println("请输入密码:");
String password1= scanner.next();
user.setPassword(password1);
c.add(user);
System.out.println("注册成功");
System.out.println("所有用户有:"+c);
break;
}
}
}
}
其中在注册时,判断输入的账号是否存在,新建一个对象然后通过集合的contains函数判断这个对象是否存在集合中。这里新建的对象中只有账号id,密码为null.(如果账号id重复即视为注册账号重复)
System.out.println("请输入注册账号:");
int id = scanner.nextInt();
Person user = new Person(id,null);
if (c.contains(user)) {
System.out.println("此账号已存在,请重新输入");
}
使用集合的contains时需要重写equals方法,仅仅判断用户id。
@Override
public boolean equals(Object obj) {
Person user = (Person) obj;
return this.id==user.id;
}
另外注册成功后,输出集合中全部用户,这里需要重写了toString方法
@Override
public String toString() {
return "账号:"+this.id+" 密码:"+this.password;
}
由于前面判断用户输入账号是否重复问题修改了集合中contains的方法,因此在登录中,不能通过改方法判断用户登录输入的账号和密码是否存在集合中,这里使用了迭代器。
while (iterator.hasNext()) {
Person user = (Person) iterator.next();
if (user.id == id && user.password.equals(password)) {//字符串比较一定要用equals,,,
flag = true;
}
}
if (flag) {
System.out.println("登录成功,欢迎....");
break;
} else {
System.out.println("账号或者密码错误,请重新输入");
}
结束,,,,,