【发布时间】:2016-02-23 19:00:08
【问题描述】:
所以我有一个看起来像这样的for 循环:
for (int i = 0; i < al.size(); i++) {
for (int j = i + 1; j < al.size(); j++) {
if (isAnagram(al.get(i), al.get(j))) {
al.set(i, al.get(i) + " " + al.get(j));
al.remove(j);
}
}
}
al 是包含单词(字符串)的 ArrayList,假设它看起来像这样:
[aabb, aabc, abab, abba, abcd, bbaa, cbad]
并且isAnagram 返回true 或false 如果两个给定的字符串是否是字谜。
我试图让它将每个单词的所有字谜添加到一个字符串中,所以它看起来像这样:
[aabb abab abba bbaa, aabc, abcd cbad]
现在我得到:
[aabb abab, aabc, abba bbaa, abcd cbad]
所以我认为正在发生的事情 - 第二个for 会在它找到al.get(i) 的第一个字谜时结束,然后它会中断并继续下一个i。有人可以解释为什么会这样吗?
【问题讨论】:
-
你不能在数组列表中删除这样的项目
al.remove(j);你应该使用迭代器 -
删除
ul.remove(j);后删除它并没有帮助我得到:[aabb abab, aabc, abab abba, abba bbaa, abcd cbad, bbaa, cbad]- 它仍然不能超过一个字符串的一个字谜 -
一种解决方案是在删除`al.remove(j);`后的if条件内插入
j--;。 -
添加
j--;也无济于事。输出仍然是:[aabb abab, aabc, abba bbaa, abcd cbad] -
Put
i--;insted ofj--;