Java简单登录\注册应用

时间:2021-04-13 10:25:37

标签: java

我刚刚了解了哈希图,所以我想制作一个提供登录和注册服务的小应用程序。做的时候卡住了,登录方法没做完。

Member.java -

public class Member {
private final String username;
private final String password;
private final String firstName;

private static final Map<String, String> loginMember = new HashMap<>();


public Member(String username, String password, String firstName) {
    this.username = username;
    this.password = password;
    this.firstName = firstName;
}

public String getUsername() {
    return this.username + "";
}

public String getPassword() {
    return this.password + "";
}

public String getFirstName() {
    return this.firstName + "";
}

public boolean isMemberExist(Member member){
    if(loginMember.containsKey(member.getUserName()) && loginMember.containsValue(member.getPassword())){
        return true;
    } else {
        System.out.println("No member in the list!");
    }
    return false;
}

public void register(Member member) {
    if(isMemberExist(member)) {
        System.out.println("This member is already exist!");
    } else {
        loginMember.put(member.getUsername(),member.getPassword());
    }
}
public void login(Member member){
    if(isMemberExist(member)) {
        System.out.println("Hello " + member.getFirstName());
    } else {
        System.out.println("No member with username " +member.getUsername());
    }
}

Main.java -

public class Main {
private static final Scanner sc = new Scanner(System.in);
private static Member member = new Member("blabla","blabla","bla");
public static void main(String[] args) {

    boolean exitRequested = false;
    while(!exitRequested) {
        System.out.println("Press: " + "\n" +
                        "\r" + "1.Register" + "\n" +
                        "\r" + "2.Log in" + "\n" +
                        "\r" + "3.Exit.");
        int choice = sc.nextInt();
        switch (choice){
            case 1:
                register();
                break;

            case 2:
                login();
                break;

            case 3:
                exitRequested = true;
                break;

            default:
                System.out.println("?");
                break;
        }
    }

}
public static void register() {
    System.out.println("What's your first name?");
    String firstName = sc.next();
    System.out.println("Please enter username");
    String username = sc.next();
    System.out.println("Please enter password");
    String password = sc.next();
    Member newMember = new Member(username,password,firstName);
    member.register(newMember);
}

public static void login(){ // here I got stuck I seriously dont know how to continue...
    System.out.println("Username:");
    String username = sc.next();
    System.out.println("Password:");
    String password = sc.next();

}

如何修复此代码?

2 个答案:

答案 0 :(得分:0)

您的代码的问题在于 HashMap 在另一个类中,而您的“登录”在 Main 类中。因此,您需要从主类访问 Member 类中的 HashMap

我对代码进行了必要的更改,以使 HashMap 可从另一个类访问。我也删除了你的一些条件,因为它不起作用。我可能可以解决它,但这不是问题(“登录”是您的问题吗?)。所以我测试了代码,它工作正常。注册 -> 登录 -> 如果正确(终止程序)——如果没有(重新登录)。

会员.java

import java.util.HashMap;
import java.util.Map;

public class Member {
private final String username;
private final String password;
private final String firstName;

private static final HashMap<String, String> loginMember = new HashMap<>();

//add a blank constructor so you can call this class for login purposes
public Member(){
    this.username = "";
    this.password = "";
    this.firstName = "";
}

public Member(String username, String password, String firstName) {
    this.username = username;
    this.password = password;
    this.firstName = firstName;
}

//method to access hashmap to another class
public HashMap<String, String> getMemberMap() {
     return loginMember;
}

public String getUsername() {
    return this.username + "";
}

public String getPassword() {
    return this.password + "";
}

public String getFirstName() {
    return this.firstName + "";
}


//something wrong with this method here
public boolean isMemberExist(Member member){
    if(loginMember.containsKey(member.getUsername()) && loginMember.containsValue(member.getPassword())){
        return true;
    } else {
        System.out.println("No member in the list!");
    }
    return false;
}

//something also wrong here
public void register(Member member) {
        loginMember.put(member.getUsername(),member.getPassword());
}


public void login(Member member){
    if(isMemberExist(member)) {
        System.out.println("Hello " + member.getFirstName());
    } else {
        System.out.println("No member with username " +member.getUsername());
    }
}
}

Main.java

import java.util.HashMap;
import java.util.Scanner;

public class Main{
    private static final Scanner sc = new Scanner(System.in);
    private static Member member = new Member("blabla", "blabla", "bla");

    public static void main(String[] args) {

        boolean exitRequested = false;
        while (!exitRequested) {
            System.out.println(
                    "Press: " + "\n" + "\r" + "1.Register" + "\n" + "\r" + "2.Log in" + "\n" + "\r" + "3.Exit.");
            int choice = sc.nextInt();
            switch (choice) {
            case 1:
                register();
                break;

            case 2:
                login();
                break;

            case 3:
                exitRequested = true;
                break;

            default:
                System.out.println("?");
                break;
            }
        }

    }

    public static void register() {
        System.out.println("What's your first name?");
        String firstName = sc.next();
        System.out.println("Please enter username");
        String username = sc.next();
        System.out.println("Please enter password");
        String password = sc.next();
        Member newMember = new Member(username, password, firstName);
        member.register(newMember);
        login(); //call login after registering
    }

    public static void login() { // here I got stuck I seriously dont know how to continue...
        System.out.println("Username:");
        String username = sc.next();
        System.out.println("Password:");
        String password = sc.next();

        Member x = new Member(); //call the member class
        HashMap<String, String> loginMember = x.getMemberMap(); //access the hashmap

        find(loginMember, username, password); 
    }
    
    //This is just for testing purposes.
    public static void find(HashMap<String, String> loginMember, String username, String password) {
        for (String i : loginMember.keySet()) {
            if (i.equals(username) && loginMember.get(i).equals(password)) {
                System.out.println("User is Found!");
                System.out.println("Program will now terminate");
                System.exit(0);
                break;
            }
        }
        System.out.println("User Not Found. Login Again");
        login();
    }
}

您可能可以自己计算出条件语句。我编辑了注册方法,直接注册,测试登录功能。

答案 1 :(得分:0)

我同意 Gerome Tahud 的观点。

您所做的只是检查用户名密码是否存在。但是如果我们有两个用户:

user1 (username1, password1, firstName1),
user2 = (username2, password2, firstName2)

在您的 HashMap 中并且用户通知:

username = username1,
password = password2

注册时,你的函数会说这个用户存在,根据你的逻辑,事实并非如此。

另一件会在您的代码中产生错误的事情是,在 isMemberExist(...) 函数中,您调用了 getUserName() 而不是 getUsername( ),Java 不会以相同的方式解释它。