2014-03-13 272 views
0

我想指望在一个LinkedList唯一字多少次出现使用此代码时:for循环停止if语句满足

 for(int i2 = 0; i2 < a.size(); i2++) 
     { 
      word2 = a.get(i2); 
      for(int j2 = 0; j2 < a.size(); j2++) 
      { 
       if(word2 == a.get(j2)) 
       { 
        counter++; 
       } 
      } 
      System.out.println(word2 + " : " + counter); 
      counter = 0; 
     } 

但柜台打印出: 字母:1 好了: 1 苹果:1 字母:1 好吧:1 苹果:1 字母:1 好吧:1 苹果:1

显然有更多的T有一句话,但柜台永远不会高于一个。当if语句满足时,我认为inner for循环正在停止,但我不希望它。有什么建议么?

+0

你能使用调试器通过代码走?然后给我们更多的信息? –

回答

0

您应该使用

word2.equals(a.get(j2)) 

使用“==”你比较那些字符串,它是不相等的引用。

顺便说一下,如果你有重复的话,你会多次打印同一个词的计数器。假设你的名单上有2个苹果字样。当你达到这两个位置时,计数器将上升到2,你将打印(Apple:2)2次

+0

那么如何让它只打印一次> – user3006513

+0

您可以将这些元素复制到Set中并运行相同的代码。或者你可以创建一个新的列表,并且当你正在浏览你的初始列表时,你会验证这个元素是否在你的新列表中。如果是这样,这意味着你已经计算好了,所以你可以跳过它。如果它不计算计数器,然后将该元素插入到新列表中。 或者,如果您不需要将列表保留为初始状态,则可以在“if” a中的括号之间添加。删除(j2) – Dragos

+0

我尝试删除像你所建议的,但它最后的话扰乱计数。就像它会说“好吧”有两次,但它有三次。对此有何建议? – user3006513

0

这对我来说似乎是java。您无法将字符串与(==)运算符进行比较。

if(word2.equals(a.get(j2))) 
0

只是一个新的加法!

如@ user3412998所示,最好使用Sets,以避免重复。

现在,如果您只需要使用ArrayList,那么您需要带一个元素并检查是否有多个使用loop的元素的副本。如果您使用string或my contains方法,可以使用.equals方法检查条件等待你插入对象(不要忘记在相应的类中重写你的equals方法)。这是一个非常乏味的过程,我不推荐它。

我相信最简单的方法是不要在数组列表中添加重复元素。要实现这一点看看下面的代码..

if(!a.contains(word)){ 
    a.add(word); 
} 

注字是一个String对象。

这里我检查天气字符串已经包含在ArrayList中,在插入之前。 稍作修改,这样就可以使用它,数组,或直接输入数据等。

我希望这有助于..