所以我有一个名为 originalList
的 ArrayList
,如下所示:
[pans, naps, pots, sit, it's, tis, snap]
我还有一个名为 modifiedList
的 ArrayList
,看起来像
[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/