2015-04-15 39 views
0

我是Java的新手,還沒有學會如何創建2個獨立的類並將它們結合起來,因此,我最終弄亂了主體中的所有內容,並且可以想象代碼最終不會看起來如何可以理解,我打算在課程後面學習。然而,我需要一個解決方案來處理'方法',所以我的代碼看起來更乾淨,如果我需要添加或修復它,這不會太麻煩。從方法得到Hashmap

所以基本上我的問題是我是否可以使用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

預先感謝您!

+0

您是否有更多的代碼? – tim

+0

應遵守範圍。在你的情況下,'newacc'不應該從'createAccount'的每次調用中被重新創建,並且應該從你想使用的地方可用。在這種情況下,你必須將它聲明爲一個靜態字段,如下所示:'private static final Map newacc = new HashMap <>();'。 –

回答

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); 
    } 
} 
+0

謝謝,正是我需要的 – javanewby

1

您的地圖newacc只能在createAccount方法內訪問,而不能訪問外部世界,因爲其範圍僅在方法createAccount之內,因此也是編譯錯誤。

要解決這個問題,請將newacc定義爲靜態類和級別。所以只要定義地圖就像方法外:

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

而且同樣,你可以直接訪問相同的主要方法。

1

你不會成爲無法從你的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"); 
}