我正在做一个练习,我将这些点与 (x,y) 存储在一个集合中,并将这些集合存储在一个 HashMap 中,其中点的类型作为键HashMap<String,Set<Point>>.
现在我想要做的是将集合中的点与找到 3 个或更多垂直或水平对齐且彼此相邻的点。所以如果点 A(2,3)、点 B(2,4) 和点 C(2,5) 将满足这一点。我想把这些通过测试的点放在另一个列表中。任何想法如何做到这一点?任何帮助表示赞赏
好的,斯蒂芬建议使用嵌套循环
for(Map.Entry<String,ArrayList<Point>> e : grid.entrySet()){
if (e.getValue().size() > 3){
for(Point p1 : e.getValue()){
for(Point p2 : e.getValue()){
if (neighborCheck(p1,p2) == true){
System.out.println(p1 + " " + p2);
}
}
}
}
public boolean neighborCheck (Point p1, Point p2){
boolean neighbor = false;
if((p1.getX()==p2.getX()+1 && p1.getY()==p2.getY()) ||
(p1.getX()==p2.getX()-1 && p1.getY()==p2.getY()) ||
(p1.getX()==p2.getX() && p1.getY()==p2.getY()+1) ||
(p1.getX()==p2.getX() && p1.getY()==p2.getY()-1)) {
neighbor = true;
}
return neighbor;
}
输出:
java.awt.Point[x=3,y=4] java.awt.Point[x=4,y=4] java.awt.Point[x=4,y=4] java.awt.Point[x= 3,y=4] java.awt.Point[x=0,y=4] java.awt.Point[x=1,y=4] java.awt.Point[x=1,y=4] java. awt.Point[x=0,y=4] java.awt.Point[x=3,y=2] java.awt.Point[x=4,y=2] java.awt.Point[x=4, y=1] java.awt.Point[x=4,y=2] java.awt.Point[x=4,y=2] java.awt.Point[x=3,y=2] java.awt.点[x=4,y=2] java.awt.Point[x=4,y=1]
它适用于 2 个点,但这绝对不是解决方案,因为要检查三个点,我需要嵌套 3 个循环等等。我不能只是继续嵌套更多的循环,因为我不知道那里的点将如何对齐,我需要比较 3 个或更多,还有其他想法吗?