gpt4 book ai didi

java - 出现意外的死循环

转载 作者:行者123 更新时间:2023-12-01 10:05:11 25 4
gpt4 key购买 nike

我有一个充满 500 个点对象的 ArrayList。其中可能有重复项,因此我想找到它们,如果需要,请删除它们(除了一个)。计划是:检查arrayList中的每个Point,如果存在相等的Point,如果有,则将其添加到List中,对每个Point进行测试后,从原始List中删除也在toRemove-List中的所有Point .

但问题来了:如果我运行这个,它会陷入无限循环。我是否有严重的思维错误?我认为这可能是一个非常简单的错误,但我无法思考

此外,如果您对如何做得更好有任何建议,请告诉我。

这是我的方法:

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();
}

}

最佳答案

我建议使用流来完成此任务:

List result =
points
.stream()
.distinct()
.collect(Collectors.toCollection(ArrayList::new));

为了使 distinct() 按预期工作,您可能必须为 Point 类定义一个 equals() 方法。

关于java - 出现意外的死循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36528363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com