java - 有人可以帮我纠正这个java循环吗?这已经非常接近正确了

标签 java

所以我有一个名为 originalListArrayList ,如下所示:

[pans, naps, pots, sit, it's, tis, snap]

我还有一个名为 modifiedListArrayList ,看起来像

[anps, anps, opst, ist, ist, ist, anps]

修改后的列表采用原始列表,删除标点符号,然后对其进行排序。该程序的目的是获取输入 (originalList) 并查看输入中是否有字谜词。字谜词是由相同字母组成的单词。我的循环出现问题,打印出字谜词。这是循环:

    for (int i=0; i<modifiedList.size();i++){
        System.out.print(originalList.get(i));
        for (int j=i+1;j<modifiedList.size();j++){
            if (modifiedList.get(i).contentEquals(modifiedList.get(j))){
                System.out.print(" "+ originalList.get(j));
                originalList.remove(j);
                modifiedList.remove(j);                     
            }

        }System.out.println();

    }

当我运行循环时,我得到以下结果:

pans naps snap
pots
sit it's
tis

一切都是正确的,除了 tis 没有被列为“sit”和“it's”的字谜。这是使用 modifiedList.remove(j) 的原因,它会导致第二个循环在到达 tis 之前退出,并且 tis 永远不会用 sat 和 it's 打印。 moddedList.remove(j) 是必要的,以便单词不会在输出中重复。我该如何解决这个问题,以便 tis 被列为 sat 和 it's 的字谜?

最佳答案

问题是您正在更改数组上的索引,但没有更改 j。当您删除时,后面的每个项目的索引都会减少 1。因此,当您点击它时,它会匹配。您删除它,将其移动到它原来的索引。然后,将 1 添加到 j,现在它已经超出了数组的末尾(因为 snap 已经被删除)。所以,去掉j后,需要将j减1。

关于java - 有人可以帮我纠正这个java循环吗?这已经非常接近正确了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318158/

相关文章:

java - java中的字符串分词器

java - 跳过java中的BufferedReader readLine()方法

java - 用于 Windows 应用程序自动化的良好 Java 库

java - 意外的输入结束 : expected close marker for OBJECT

java - 生成唯一的随机整数集

java - 在 EMF 中定义 EEList 类型属性时出错

java - 什么是相当于 null 的 double/int 值?

java - Tomcat 不卸载 Web 应用程序

java bean表示读取前缀:attrName

java - 使用不包含类文件的java库