我有一個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