2013-03-04 16 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共享同一个对象。