从方法获取哈希图



我是 Java 新手,还没有学会如何创建 2 个单独的类并将它们组合在一起,因此,我最终将所有内容都混杂在一起,您可以想象代码最终看起来如何无法理解,我计划稍后在我的课程中学习。然而,我需要一个解决方案来使用"方法",这样我的代码才能看起来更干净,如果我需要添加或修复它,它不会有太大的麻烦。

所以基本上我的问题是我是否可以从main中使用Hashmap.get从方法中创建的哈希图中获取信息:

static String createAccount(String username, String authpassword) {
    Map<String, String> newacc = new HashMap<String, String>();
}

以上是方法"将"的样子,在主方法下方:

public static void main(String args[]) {
    newacc.get(username);
}

这是可能的吗,似乎我遇到了这个错误(我认为主要方法没有读取方法中创建的hasmap。

error: cannot find symbol
    newacc.get(username);

提前谢谢你!

您在

createAccount()中创建的映射将分配给局部变量newacc 。这意味着在方法完成后,您将丢失对它的引用。

如果要保留可以添加新帐户的地图,可以将其作为类的字段:

class AccountManager {
    private static Map<String, String> accounts = new HashMap<>();
    static void createAccount(String username, String authpassword) {
        accounts.put(username, authpassword);
    }
    static String getAuthPassword(String username) {
        return accounts.get(username);
    }
    public static void main(String[] args) {
        // get the input from somewhere
        AccountManager.createAccount(username, authpassword);
        AccountManager.getAuthPassword(username);
    }
}

您的映射newacc只能在createAccount方法中访问,而不能访问外部世界,因为它的范围仅在方法createAccount内,因此编译错误。

若要解决此问题,请将newacc定义为静态和类级别。因此,只需在方法外部定义 Map,例如:

static Map<String, String> newacc = new HashMap<String, String>();
static String createAccount(String username, String authpassword) {
    //access newacc here
}

同样,您可以直接在main方法中访问相同的内容。

使用当前代码无法从 main 方法访问 newacc 变量,因为newacc的作用域为 createAccount 方法。您有两种选择,将newacc定义为类中的静态字段并从两种方法访问同一实例(请参阅@SMA的答案),或者从 createAccount 方法返回您的帐户并在 main 中捕获它。这样:

Map<String, String> createAccount(String username, String password) {
    Map<String, String> newacc = new HashMap<String, String>();
    // do stuff with account
    return newacc;
}
public static void main(String[] args) {
    Map<String, String> newacc = createAccount("user", "pass");
    newacc.get("username");
}

最新更新