2013-03-04 58 views
1

我在寫一個方法,它允許我計算String類型的元素在Strings類型的LinkedList中出現的次數。我的代碼如下所示,不起作用。我一直在索引超出我在下面評論的行。似乎無法找到的bug元素顯示在鏈表中的計數次數Java

public int findDuplicate (LinkedList<String> e) { 
    int j = 1; 
    LinkedList<String> test = e; 
    while (!test.isEmpty()){ 
     test = e; 
     String value = test.pop(); 
     //Screws up here when i = 6 
     for(int i =0; i<=test.size() && test.get(i)!=null; i++){ 
      String value3 = test.get(i); 
      if(e.get(i).equals(value) && i<=test.size()){ 
       String value2 = test.get(i); 
       j++; 
       String Duplicate = e.get(i); 
       e.remove(i); 
      } 
     } 
     System.out.println(value + " is listed " + j + " times"); 

    } 
    return j; 
} 

使用包含HashMap ..仍然無法正常工作 公共無效findDuplicate(LinkedList的E){

 Map<String,Integer> counts = new HashMap<String,Integer>(); 

     while(!e.isEmpty()){ 
      String value = e.pop(); 
      for(int i =0; i<e.size(); i++){ 
       counts.put(value, i); 
      } 
     } 
     System.out.println(counts.toString()); 
} 
+1

'我 Leri 2013-03-04 07:35:24

回答

5

這似乎從你如何使用teste明確你期望他們是兩個獨立的,獨立的對象。事實上,他們不是。當您執行以下任務:

test = e; 

兩個teste結束了指向同一個列表。當你改變一個,他們都改變。

至於解決此問題的好方法,您可能希望使用Map<String,Integer>來計算每個唯一字符串在列表中的出現次數。然後你可以遍歷列表一次,填充地圖。最後,地圖會給出最終的數字。

+0

如果我沒有弄錯你建議我使用hashmaps?我查看了Java Api,你能指出我應該在api內部看看如何初始化Map嗎?我還不知道如何使用API​​。我認爲這是如何Map m = Collections.synchronizedMap(new HashMap(...)); – Ali 2013-03-04 08:06:17

+0

@Ali:只需使用Map counts = new HashMap ();' – NPE 2013-03-04 08:11:58

+0

似乎無法使hashmaps正常工作?我的代碼張貼在上面。 – Ali 2013-03-04 10:07:13

2

指數從0到test.size()-1。嘗試使用:

for(int i =0; i<test.size() && test.get(i)!=null; i++){ 
... 

而且,作爲@NPE指出了這個代碼不會工作的權利,因爲etest共享同一個對象。