我是Java的新手,还没有学会如何创建两个单独的类并将它们组合在一起,所以,我最终在主要内容中混淆了一切,你可以想象代码最终看起来是不可理解的,我计划稍后在我的课程中学习。然而,我需要一个解决方案来使用'方法',所以我的代码看起来更干净,如果我需要添加或修复它不会有太多的麻烦。
所以基本上我的问题是我是否可以使用main中的Hashmap.get从方法中创建的hashmap获取信息:
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);
提前谢谢!
答案 0 :(得分:1)
您的地图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方法中访问相同的内容。
答案 1 :(得分:1)
您在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);
}
}
答案 2 :(得分:1)
您无法使用当前代码访问newacc
方法中的main
变量,因为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");
}