因此,我有一个名为ArrayListoriginalList,它类似于以下内容:


[锅,午睡,盆,坐,是,提斯,按扣]


我还有一个名为ArrayListmodifiedList


[anps,anps,opst,ist,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的字谜。这是使用modifiedList.remove(j)的原因,它会导致第二个循环在到达tis之前退出,并且tis永远不会与sit一起打印。 modifiedList.remove(j)是必需的,以便在输出中不会重复单词。我将如何解决这个问题,以便tis被列为坐姿的一个字谜?

最佳答案

问题是您要更改数组的索引,但不能更改j。删除时,将每个下一个项目的索引减少1。因此,当您单击它时,它就会匹配。您将其删除,然后将tis移至其具有的索引。然后,将1加到j,它现在从数组末尾运行(因为快照已被删除)。因此,删除j后,需要将j减1。

09-11 18:03