从用户坐标中找到最近的点

时间:2012-08-05 18:45:07

标签: java hashmap coordinates user-input

我想知道如何使用坐标查找关闭点。我正在使用一个包含坐标和字符串的Hashmap。我允许用户输入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");

    }
}
}

1 个答案:

答案 0 :(得分:8)

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


这是最小化问题。基本上,您希望使用某个指标(可能是Euclidean distance?)来计算输入点与每个已知站点之间的距离。然后,您选择与找到的最小距离对应的电台。

以下是使用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);