我正在尝试在我的方法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));
}
}
答案 0 :(得分: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));
}
}
答案 1 :(得分:1)
您声明了“x”和“y”static
,这意味着它们是类变量,而不是实例变量。
因此,每次对构造函数的新调用都将覆盖旧值。因此,distanceFromPoint
始终返回零,因为只有一个x
和一个y
。
答案 2 :(得分:1)
您不应将您的班级字段声明为static
,只需将其留下private
。
顺便说一下,请考虑使用Point
包中的Point2D
或java.awt.geom
本机类。
答案 3 :(得分:1)
问题不在于私有,相反,这是因为静态。 x是静态的。在您的方法中,您应该使用x作为:
int distX = point.getX()- Pointdeclare.x; // You could use this.x because x is static.
答案 4 :(得分:1)
我希望你发现这是相关的,它没有直接回答你的问题,但我最近被告知我对static
的理解是不正确的,所以刚刚研究了我认为可能有帮助的主题。 Static
变量属于一个类而不是它的对象,类的对象可以访问一个静态变量,但无论该类有多少个对象,都只有一个静态变量的副本。所以我认为我之前的人所说的是p1和p2而不是p2和p2都有自己的x和y副本,两个对象共享相同的x和y字段因此返回的值为0.在其他世界中你试图找到它们之间的距离一个位置,它将始终为零。希望这有助于:-)。对不起,我错过了主要方法的第一行。 p2应该返回一个值,只要它不为零,但p1不会。