Java学习:集合和迭代器的使用,实现注册,登录功能

目标:

  1. 提示用户输入注册账号(数字)和密码,如果账号已经存在,提示用户重新输入。
  2. 登录时提示用户输入登录账号和密码。如果账号和密码已经在集合中,那么登录成功,否则失败。
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("账号或者密码错误,请重新输入");
            }

结束,,,,,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值