0

xメソッドでプライベート変数 ( ) にアクセスしようとしていますdistanceFromPointが、うまくいかないようです。どうすればアクセスできますか? 私のメソッドは、他の値に関係なく常に返さ0.0れます。

コード

public class Pointdeclare {
    private static int x;
    private static int y;

    Pointdeclare (int x_ , int y_ ){
        this.x = x_;
        this.y = y_;
    }

    int getX(){
        return x;
    }

    int getY(){
        return y;
    }

    static double distanceFromZero (){
        return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
    }

    double distanceFromPoint(Pointdeclare point){
        int distX = point.getX()- this.x;
        int distY = point.getY()- this.y;

        return (double) Math.sqrt(Math.pow(distX, 2) + Math.pow(distY, 2));
    }
}

メインクラス

public class main {
    static Pointdeclare p1 = new Pointdeclare(6, 7);
    static Pointdeclare p2 = new Pointdeclare(3, 7);

    public static void main (String[] args){
        System.out.println(p2.distanceFromZero());

        System.out.print(p1.distanceFromPoint(p2));
    }
}
4

5 に答える 5

2

これはあなたにとってよりうまくいくでしょう:

package cruft;

/**
 * Point2 description here
 * @author Michael
 * @link http://stackoverflow.com/questions/14087002/how-to-access-private-variables-in-a-java-class-method
 * @since 12/29/12 6:52 PM
 */
public class Point2 {

    private int x;
    private int y;

    Point2(int x_, int y_) {
        this.x = x_;
        this.y = y_;
    }

    int getX() {
        return x;
    }

    int getY() {
        return y;
    }

    double distanceFromZero() {
        return distanceFromPoint(new Point2(0, 0));
    }

    double distanceFromPoint(Point2 point) {
        int distX = point.getX()-this.x;
        int distY = point.getY()-this.y;

        return (double) Math.sqrt(Math.pow(distX, 2)+Math.pow(distY, 2));
    }


    public static void main(String[] args) {
        Point2 p1 = new Point2(6, 7);
        Point2 p2 = new Point2(3, 7);
        System.out.println(p2.distanceFromZero());
        System.out.print(p1.distanceFromPoint(p2));
    }
}
于 2012-12-29T23:57:04.363 に答える
1

これが適切だと思うといいのですが、あなたの質問に直接答えることはできませんが、最近、私の理解staticが間違っていると知らされたので、私が助けることができると思ったトピックを調べたところです。Static変数はそのオブジェクトではなくクラスに属し、クラスのオブジェクトは静的変数にアクセスできますが、クラスのオブジェクトがいくつあっても、静的変数のコピーは1つだけです。したがって、私の前の人々が言っ​​ていたのは、p1とp2がxとyの独自のコピーを持っている代わりに、両方のオブジェクトが同じxとyフィールドを共有しているため、返される値は0だと思います。 1つの場所では、常にゼロになります。うまくいけば、それが役立つでしょう:-)。mainメソッドの最初の行を見逃してしまい申し訳ありません。p2は、ゼロでない限り値を返す必要がありますが、p1は返しません。

于 2012-12-30T00:15:20.100 に答える
1

"x" と "y" を宣言しstaticました。これは、それらがインスタンス変数ではなく、クラス変数であることを意味します。

そのため、コンストラクターを新しく呼び出すたびに、古い値が上書きされます。したがって、 oneと onedistanceFromPointしかないため、常にゼロを返します。xy

于 2012-12-29T23:52:11.670 に答える
1

クラス フィールドを として宣言しないでください。staticそのままにしておきますprivate

ところで、パッケージのネイティブ クラスPointまたはPoint2Dネイティブ クラスの使用を検討してください。java.awt.geom

于 2012-12-29T23:52:40.063 に答える
1

問題はプライベートによるものではなく、静的によるものです。x は静的です。メソッドでは、 x を次のように使用する必要があります。

int distX = point.getX()- Pointdeclare.x; // You could use this.x because x is static.
于 2012-12-29T23:52:50.630 に答える