If statement 当满足if语句时,for循环停止

If statement 当满足if语句时,for循环停止,if-statement,for-loop,If Statement,For Loop,我正在尝试使用以下代码计算LinkedList中的唯一单词出现的次数: 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)) {

我正在尝试使用以下代码计算LinkedList中的唯一单词出现的次数:

        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;
        } 
for(int i2=0;i2
但计数器打印出: 字母表:1 好的:1 苹果:1 字母表:1 好的:1 苹果:1 字母表:1 好的:1 苹果:1

显然不止一个单词,但计数器永远不会高于一个。我认为当if语句满足时,内部for循环将停止,但我不希望它停止。有什么建议吗?

您应该使用

    word2.equals(a.get(j2))
使用“==”可以将引用与不相等的字符串进行比较


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

这对我来说就像java。无法将字符串与(==)运算符进行比较

 if(word2.equals(a.get(j2)))
只是一个新的添加

正如@user3412998所建议的,最好使用集合,这样可以避免重复

现在,如果只需要使用ArrayList,则需要获取一个元素并使用循环检查该元素是否有多个副本。如果使用string,则可以使用.equals方法检查该条件;如果插入对象,则可以使用my contains方法(别忘了在相应的类中重写equals方法)。这是一个非常乏味的过程,我不推荐这样做

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

if(!a.contains(word)){
   a.add(word);
}
注意word是一个字符串对象

在这里,我在插入之前检查字符串是否已经包含在ArrayList中。 进行一些修改,以便可以将其用于数组或直接输入数据等


我希望这有帮助

那么我如何使它只打印一次>您可以将这些元素复制到一个集合中并运行相同的代码。或者,您可以创建一个新列表,在查看初始列表时,验证元素是否在新列表中。如果是,就意味着你已经数过了,所以你可以跳过它。如果不是,请计算计数器,然后在新列表中插入元素。或者,如果您不需要列表保持初始状态,您可以在“if”a.remove(j2)中的括号之间添加。我尝试按照您的建议删除,但这会打乱最后一个单词的计数。就像它会说“好的”有两次,但它有三次。对此有什么建议吗?你能用调试器浏览一下代码吗?那么给我们更多的信息?