从另一个类访问地图不起作用

问题描述 投票:0回答:1

我正在制作一个银行系统模拟器,有 2 个类 - 注册和登录。

public class Signup {
    Scanner scanner = new Scanner(System.in);
    public Map<String,String> account = new HashMap<>();
    String input_username;
    String input_password;

    public Map<String,String> getAccount() {
        for (String username : account.keySet()) {
            System.out.println(username);
        }
        return account;
    }

    public void signup() {
        System.out.println("Enter username: (Signup)"); //add: verify only 1 account exists
        input_username = scanner.next();
        System.out.println("Enter password:");
        input_password = scanner.next();
        System.out.println("Signup successful.");
        account.put(input_username,input_password);
    }
}

注册类将用户名和密码保存在帐户哈希图中,供登录类使用:

public class Login {
    Scanner scanner = new Scanner(System.in);
    Signup getDetails = new Signup();
    public Map<String,String> account = new HashMap<>();

    public void login() {
        account = getDetails.getAccount();
        for (String username : account.keySet()) {
            System.out.println(username);
        }
        System.out.println("Enter username (Login)");
        if (account.containsKey(scanner.next())) {
            System.out.println("Enter password");
        } else {
            System.out.println("This account isn't registered.");
        }
    }
}

(for循环只是用来验证用户名是否保存在hashmap中。

但是,当我使用 getDetails 函数从注册类访问它时,它不起作用。 for 循环不输出任何内容。

java class hashmap
1个回答
0
投票

如何创建对象?

创建 Login 类后,您将创建一个带有空 HashMap 的新 Signup 对象。因此,如果您首先创建 Signup 对象,那么

您有不同的选择,一个示例是创建第三个类作为 MemberSafe (或类似的东西),并将这个确切的对象提供给登录和注册的构造函数并将其引用为存储,例如:

public static void main(String[] args) {

    MemberSafe memberSafe = new MemberSafe();
    
    Signup signup = new Signup(memberSafe);
    Login login = new Login(memberSafe);
}

还有一种可能是,您可以在 Signup 类中将您的帐户映射静态(我不喜欢这样做,但我想这取决于您)。

我也不会在 Login 类中创建重复的 Map

最诚挚的问候, 朱利叶斯

© www.soinside.com 2019 - 2024. All rights reserved.