3

座標を使用して近点を見つける方法を知りたいのですが。座標と文字列を保持するハッシュマップを使用しています。ユーザーがx軸とy軸を入力し、それらをintaとintbとして格納することを許可しましたが、そこからどこに行くべきかわかりません。見てくれてありがとう

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");

    }
}
}
4

1 に答える 1

8

まず、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);
于 2012-08-05T18:57:13.627 に答える