【问题标题】:for loop stops when if statement is satisfied当 if 语句满足时 for 循环停止
【发布时间】:2014-03-13 01:51:11
【问题描述】:

我正在尝试使用此代码计算 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;
        } 

但是计数器打印出来: 字母:1 好的:1 苹果:1 字母:1 好的:1 苹果:1 字母:1 好的:1 苹果:1

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

【问题讨论】:

  • 你能用调试器来遍历代码吗?然后给我们更多信息?

标签: if-statement for-loop


【解决方案1】:

你应该使用

    word2.equals(a.get(j2))

使用“==”将引用与不相等的字符串进行比较。

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

【讨论】:

  • 那么如何让它只打印一次>
  • 您可以将这些元素复制到 Set 中并运行相同的代码。或者您可以创建一个新列表,并在浏览初始列表时验证该元素是否在新列表中。如果是,则意味着您已经数过了,因此您可以跳过它。如果它不计算计数器,然后将元素插入到新列表中。或者,如果您不需要您的列表保持初始状态,您可以在 "if" a.remove(j2) 中的括号之间添加
  • 我尝试按照您的建议删除,但它弄乱了最后一句话的计数。就像它会说“好吧”出现了两次,但出现了三次。有什么建议吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    只是一个新的补充!!!

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

    现在,如果您只需要使用 ArrayList,那么您需要获取一个元素并使用循环检查该元素是否有多个副本。如果您使用的是字符串,则可以通过 .equals 方法检查条件,或者我的 contains 方法以防万一您正在插入对象(不要忘记在相应的类中覆盖您的 equals 方法)。这是一个非常繁琐的过程,我不建议这样做。

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

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

    注意字是一个字符串对象。

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2023-04-09
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      相关资源
      最近更新 更多