0

座標間の距離を取得しようとしていますが、何らかの理由で機能していないようです。誰か助けていただければ幸いです!

出力:

点 a から点 b までの距離は 0.0 です。点 a から点 b までの距離は 0.0 です。点 a から点 b までの距離は 0.0 です。点 a から点 b までの距離は 0.0 です。p1 から p2 までの距離は 4.242640687119285 p1 から p3 までの距離は 12.727922061357855

package GC01;

public class Point {
    private final double x;
    private final double y;
    private double distance;

    public Point(){
        x=0.0;
        y=0.0;
    }

    public Point(double x, double y) { 
        this.x=x; 
        this.y=y;
    }

    public double distanceTo(Point a, Point b) {
        double dx = a.x - b.x;
        double dy = a.y - b.y;
        distance = Math.sqrt(dx*dx + dy*dy);
        return distance;
    }
    public String toString(){
        return "The distance from Point a to Point b is " + distance +".";
    }

public static void main(String[] args){
    Point p0 = new Point();
    Point p1 = new Point(0.0,0.0);
    Point p2 = new Point(3.0,3.0);
    Point p3 = new Point(9.0,9.0);
    System.out.println(p0.toString());
    System.out.println(p1.toString());
    System.out.println(p2.toString());
    System.out.println(p3.toString());
    System.out.println("The distance from p1 to p2 is "+p1.distanceTo(p1,p2));
    System.out.println("The distance from p1 to p3 is "+p1.distanceTo(p1,p3));
}
}
4

2 に答える 2

2

メインを実行すると、ポイントを作成した後に Point.toString() メソッドを 4 回呼び出していることがわかります。これを行うと、distanceTo メソッドが呼び出されていないため、距離変数はまだ設定されていません。

Point p0 = new Point();
Point p1 = new Point(0.0,0.0);
Point p2 = new Point(3.0,3.0);
Point p3 = new Point(9.0,9.0);
System.out.println(p0.toString());
System.out.println(p1.toString());
System.out.println(p2.toString());
System.out.println(p3.toString());

これらの Point.toString 呼び出しが発生したとき、distanceTo メソッドは呼び出されていないため、それらのポイントの距離は設定されていません。

distanceTo メソッドを呼び出すため、最後の 2 行に数値が出力されます。

于 2013-10-06T21:55:53.363 に答える
0

これはうまくいきますか?

public class Point {
    private final double x;
    private final double y;

    public Point() {
        x = 0.0;
        y = 0.0;
    }

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public double distanceTo(Point other) {
        double dx = other.x - this.x;
        double dy = other.y - this.y;
        double distance = Math.sqrt(dx * dx + dy * dy);
        return distance;
    }

    public String toString() {
        return x + "/" + y;
    }

    public static void main(String[] args) {
        Point p0 = new Point();
        Point p1 = new Point(0.0, 0.0);
        Point p2 = new Point(3.0, 3.0);
        Point p3 = new Point(9.0, 9.0);
        System.out.println(p0.toString());
        System.out.println(p1.toString());
        System.out.println(p2.toString());
        System.out.println(p3.toString());
        System.out
                .println("The distance from p1 to p2 is " + p1.distanceTo(p2));
        System.out
                .println("The distance from p1 to p3 is " + p1.distanceTo(p3));
    }
}

distanceある点と別の点の間の距離しか存在できないため、クラスから変数を削除しました。点自体には距離がありません。

私も変更しましたdistanceTo:あなたが呼び出すとき、への参照をp1.distanceTo(p2)渡します。p2 がメソッドで呼び出されるようになりました。p2p1otherdistanceTo

書くthis.xことは、より冗長な書き方ですx。この変数がメソッドのレシーバー (この場合) にx属していることを明確にしたかったのです。distanceTop1

最後にtoString、ポイントの X 座標と Y 座標を出力するように変更しました。Java インスタンス変数では、削除されたものなどdistanceは常に 0 で初期化されます。これが、px.toString()常に出力される理由です。

点 a から点 b までの距離は 0.0

.

于 2013-10-06T22:02:09.397 に答える