因此,我有一个名为ArrayList
的originalList
,它类似于以下内容:
[锅,午睡,盆,坐,是,提斯,按扣]
我还有一个名为ArrayList
的modifiedList
[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。