我有一个ArrayList充满了500个点对象。有可能是重复的,所以我想找到它们,如果需要删除它们,除了一个。该计划是:检查arrayList中的每个点,如果存在相同的点,如果是,则将其添加到列表中,在对每个点进行测试后,从原始列表中删除也位于toRemove-List中的所有点。意外的无限循环出现
但是,问题来了:如果我运行它,它会进入一个无限循环。我有严重的思维错误吗?我认为这可能是一个非常简单的误会,但我不能想到它
另外,如果你有任何建议,如何更好地做到这一点,让我知道。
这是我的方法:
private void checkForDuplicates() {
ArrayList <Point> toRemove=new ArrayList<Point>();
int i=0;
while(i<points.size()) {
Point local=points.get(i);
for (Point p: points) {
if (local!=p && local.equals(p)) {
toRemove.add(p);
}
}
for (Point p: toRemove) {
points.remove(p);
}
i++;
}
}
更新:
东西真的打破。看起来这个方法现在可能正常工作,但我的程序并不是。如果我在某处调用此方法,代码不再运行。我甚至不能在控制台上打印出一些东西作为我主要方法的第一行,而我在其他地方打电话给checkForDuplicates()
?!
点:
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public boolean equals(Object p) {
if (this == p) {
return true;
}
if (!(p instanceof Point)) {
return false;
}
Point point = (Point) p;
return this.getX() == point.getX() && this.getY() == point.getY();
}
}
点在哪里?哪个循环是无止境的? – Abdelhak
也许你应该在清除点后清空'''清除'''''''''''''''''''''''''此外,这将跳过一些要点,因为''我''不会针对您删除的点进行调整。 –
点是一个字段(ArrayList)。 – Master1114