从用户坐标中查找最近点



我想知道如何使用坐标查找关闭点。 我正在使用保存坐标和字符串的哈希图。 我允许用户输入 X 和 Y 轴并将它们存储为 int A 和 int b,但我不知道从那里开始。 感谢您的查看

import java.util.HashMap;
import java.util.Scanner;
public class Coordinate {
static class Coords {
    int x;
    int y;
    public boolean equals(Object o) {
        Coords c = (Coords) o;
        return c.x == x && c.y == y;
    }
    public Coords(int x, int y) {
        super();
        this.x = x;
        this.y = y;
    }
    public int hashCode() {
        return new Integer(x + "0" + y);
    }
    public String toString()
    {
        return x + ";" + y;
    }

}
public static void main(String args[]) {
    HashMap<Coords, String> map = new HashMap<Coords, String>();
    map.put(new Coords(250, 140), "Clifton street");
    map.put(new Coords(195, 115), "twoli");
    map.put(new Coords(165, 95), "Jacobs well");
    map.put(new Coords(140, 90), "moxbridge");
    map.put(new Coords(55, 95), "parkway");
    map.put(new Coords(15, 120), "easton");
    map.put(new Coords(260, 25), "Weston on shore");
    map.put(new Coords(250, 60), "newbridge");
    map.put(new Coords(185, 85), "central");
    map.put(new Coords(140, 100), "stdennis");
    map.put(new Coords(85, 140), "trim bridge");
    map.put(new Coords(170, 35), "windmill hill");
    map.put(new Coords(150, 60), "shakespeare court");
    map.put(new Coords(95, 50), "temple fields");
    map.put(new Coords(55, 125), "pirac cresent");
    map.put(new Coords(150, 155), "st judes hill");
    Scanner input = new Scanner(System.in);
    int i;
    int a;
    int b;
    System.out.println(map.size());
    System.out.println(map.toString());
    Coords c = new Coords(65,72);
    System.out.println(c + " - " + map.get(c));
    System.out.println("choose from the following");
    System.out.println("find closest station = 1");
    System.out.println("plan train route = 2");
    i = input.nextInt();
    if (i==1){
        System.out.println("enter your x axis ");
        a = input.nextInt();
        System.out.println("enter your y axis");
        b = input.nextInt();
        System.out.println("the nearest station is");
    }
    else if (i==2){
        System.out.println("route planner");
    }
    else {
        System.out.println("entered incorrect number");
    }
}
}

首先,我建议你接受KevinMangold的建议,因为Java提供了一个完全适合你的Point类供你使用。


这是一个最小化问题。本质上,您希望使用某种度量(也许是欧氏距离?)计算输入点与每个已知站之间的距离。然后,选择与找到的最小距离相对应的站。

下面是一些使用 Collections.min 的示例代码:

final Map<Point, String> names = ...;
final Set<Point> stations = names.keySet();
final Point source = ...;
final Point nearest = Collections.min(stations, new Comparator<Point>() {
  public int compare(final Point p1, final Point p2) {
    return (int) p1.distanceSq(p2);
  }
});
final String name = names.get(nearest);

相关内容

  • 没有找到相关文章

最新更新