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

您声明了 "x" 和 "y" static,这意味着它们是类变量,而不是实例变量。

因此,每次对构造函数的新调用都会覆盖旧值。因此distanceFromPoint总是返回零,因为只有 onex和 one y

于 2012-12-29T23:52:11.670 回答
1

您不应该将您的类字段声明为static,而是将它们保留为private

顺便说一句,考虑使用包中的PointPoint2D本机类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 回答
1

我希望你觉得这很相关,它不能直接回答你的问题,但我最近被告知我的理解static是不正确的,所以刚刚研究了我认为也许我可以提供帮助的主题。Static变量属于一个类而不是它的对象,一个类的对象可以访问一个静态变量,但是无论类的对象有多少,静态变量都只会有一个副本。所以我认为我之前的人所说的不是 p1 和 p2 拥有自己的 x 和 y 副本,两个对象共享相同的 x 和 y 字段,因此您返回的值是 0。在其他世界中,您试图找到之间的距离一个位置,它总是为零。希望这会有所帮助:-)。很抱歉我错过了 main 方法的第一行。p2 应该返回一个值,只要它不为零,但 p1 不会。

于 2012-12-30T00:15:20.100 回答