2014-11-14 113 views
1

我想獲得的HashMap存儲字符串和ArrayList<String>. Basicly什麼,我想要的是第一個字符串是一個名稱,以及該ArrayList包含每個國家的用戶已到。的HashMap <字符串,ArrayList的<String>>

"The HashMap contains: {Andrew=[USA, China, Sweden, Denmark], Lola=[USA, China, Sweden, Denmark]}" 

ArrayList<String> namelist = new ArrayList<>(); 
ArrayList<String> test = new ArrayList<>(); 
ArrayList<String> archive = new ArrayList<>(); 
HashMap<String, ArrayList<String>> thearchive = new HashMap<>(); 

(input.equals("New Country")){ 
    System.out.println("Name of the Person? "); 
    String name = in.nextLine(); 
    if(namelist.contains(name)){ 
     System.out.println("Which Country have you visited?"); 
     String country = in.nextLine(); 
     if (archive.contains(country)){ 
      System.out.println("You've already visited this country."); 
     } 
     else { 
      test.add(country); 
      thearchive.put(name, country); 
      System.out.println("HashMap Contains: " + thearchive); 
     } 
    } 
    else{ 
     System.out.println("The person does not exist please add first."); 
    } 

是否有人知道爲什麼HashMap中沒有存儲鍵/值對:

Example: 
{Andrew, [USA, China]} 
{Lola, [Sweden, Denmark]} 

我遇到的問題是,每當用戶將在一個國家,這個國家將被這兩個名稱下存儲我也想要嗎?

+1

您需要提供其餘的代碼。 – archie

回答

1

通常你的問題是由於對所有人重新使用相同的ArrayList,所以所有人都共享相同的國家,所有人都由一個ArrayList保存。一個解決方案是爲每個人創建一個新的ArrayList - 這意味着new ArrayList<String>需要在某個循環內創建您的旅行者姓名字符串。

因此,例如,你可以更改您的代碼如下:

ArrayList<String> namelist = new ArrayList<>(); 
ArrayList<String> test = new ArrayList<>(); 

// ArrayList<String> archive = new ArrayList<>(); 

HashMap<String, ArrayList<String>> arkivet = new HashMap<>(); 

(input.equals("New Country")){ 
    System.out.println("Name of the Person? "); 
    String name = in.nextLine(); 

    archive = ArrayList<String>(); // ********** 
    arkivet.put(name, archive); // ************ 

    if(namelist.contains(name)){ 
     System.out.println("Which Country have you visited?"); 
     String country = in.nextLine(); 
     if (archive.contains(country)){ 
      System.out.println("You've already visited this country."); 
     } 
     else { 
      test.add(country); 
      thearchive.put(name, country); 
      System.out.println("HashMap Contains: " + thearchive); 
     } 
    } 
    else{ 
     System.out.println("The person does not exist please add first."); 
    } 
+0

謝謝,將嘗試代碼,看看它讓我:) – Hablo

+0

這兩行代碼做什麼? 「archive = = ArrayList (); // **********」,「arkivet.put(name,archive); // ************」因爲我只是在這些行上運行程序時得到非法表達式開始 – Hablo

+0

@Hablo:typo。發生這種情況是因爲我正在處理我無法編譯的代碼片段,所以我無法讓編譯器通知我,當我的胖手指蠢蠢欲動時。 –

0

你的代碼是不是去完成的,所以我不知道什麼是測試一個thearchive。但讓我們創建一個示例:

HashMap<String, ArrayList<String>> list = new HashMap<String, ArrayList<String>>(); 
ArrayList<String> anotherlist = new ArrayList<String>(); 
anotherlist.add("Brazil"); 
anotherlist.add("USA"); 
list.put("Augusto", anotherlist); 

我希望它有幫助。

+0

問題是我需要通過System.in從用戶那裏獲取名稱和國家。 – Hablo

相關問題