日期:2014-05-20  浏览次数:20668 次

新手搞,对象求助。

class Point {    
double x, y, z;  //定义三维点的三个坐标

Point(double _x, double _y, double _z) {//定义三维点的构造方法。
x = _x;
y = _y;
z = _z;
}

void setX(double _x) {//提供三维点坐标X的设置方法
x = _x;
}

double getDistance(Point p) {//计算该点距离原点,距离平方的方法
return (x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z);
}

}

public class TestPoint {
public static void main(String[] args) {
Point p = new Point(1.0, 2.0, 3.0);
Point p1 = new Point(0.0, 0.0, 0.0);
System.out.println(p.getDistance(p1));

p.setX(5.0);
System.out.println(p.getDistance(new Point(1.0, 1.0, 1.0)));
}
}


这里面计算原点距离return (x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z);
这个的时候。为什么默认X,Y,Z的值都是POINT P的。不是P1的。
没搞明白这个对象为什么会这样。

------解决方案--------------------
你的计算距离的方法的定义是这样的
double getDistance(Point p);
你这个方法是在一个Point类里面的,所以你这个方法的含义就是计算这个Point距离你传递的Point p的距离有多远,这么来看是和什么p1没有关系
然而你在调用的时候是这么写的
p.getDistance(p1);
这里有两个Point 一个是p  一个是p1  因为你调用的方法是属于p的,所以这个p是我在上面强调的第一个红色部分对象。而你的参数传递的是p1,也就是对应我上面强调的第二个红色部分对象。

不知道我这么说楼主明不明白,其实这东西说难也难,说简单也简单,只要楼主不要以转牛角尖的态度来看待这个问题,就会很容易想清楚的