为什么我班级的测试程序会为我的答案返回0.0?

时间:2016-08-26 14:42:53

标签: java

package Geometry;

public class TestGeometryPoint {

public static void main(String[] args) {
    //Creates the object PointA and Assigns values
    Point pA = new Point(); //PointA(0, 0)
    pA.setX(2.0); //PointA(2.0, 0)
    pA.setY(5.0); //PointA(2.0, 5.0)

    //Creates the object PointB and Assigns values
    Point pB = new Point(4.0, 6.1); //PointB(4.0, 6.1)

    //Calculates the distance between PointA and PointB
    double d = pA.distance(4.0, 6.1); //Distance from class to a set of coordinates
    double dP = pA.distance(pB); //Distance from class to another point
    double dPtP = Point.distance(pA, pB); //Distance from point to point

    //Prints the result of the calculations
    System.out.println("Distance between Point A & B: " + d);
    System.out.println("Distance between Point A & B: " + dP);
    System.out.println("Distance between Point A & B: " + dPtP);
}

}

这是我的Test Class和我的Point类。

package Geometry;

public class Point {

//Initializes the coordinates for a point on a graph with the values of x and y
private static double x;
private static double y;

//Defualt Constructor
public Point() {
    x = 0;
    y = 0;
}

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

//Returns the x value
public double getX() {
    return x;
}

//Changes the x value
public void setX(double x) {
    Point.x = x;
}

//Returns the y value
public double getY() {
    return y;
}

//Changes the y value
public void setY(double y) {
    Point.y = y;
}

//Calculates the distance between the class's point coordinates and another set of point coordinates
public double distance(double x0, double y0) {
    double distance = (Math.sqrt(((x0 - x) * 2.0) + ((y0 - y) * 2.0)));
    return distance;
}

//Calculates the distance between the class's point and another Point class's location
public double distance(Point p) {
    double distance = (Math.sqrt(((p.getX() - x) * (p.getX() - x)) + ((p.getY() - y) * (p.getY() - y))));
    return distance;
}

//Calculates the distance between a Point class's location and another Point class's location
public static double distance(Point p1, Point p2) {
    double distance = (Math.sqrt((Math.pow((p2.getX() - p1.getX()), 2.0) + (Math.pow((p2.getY() - p1.getY()), 2.0)))));
    return distance;
}

}

d,dP,dPtP:在编译和运行时都返回0.0,但我不知道为什么我在计算距离时尝试更改代码并检查数学。我想我可能只需要一副新的眼睛来看看它。

2 个答案:

答案 0 :(得分:0)

您的问题是您混淆了静态和非静态字段。

通过在你的字段声明中加上那个 static ,你会说:这个类的所有实例都应该看到完全相同的变量。

所以,当你创建两个点

p1 = new Point(5, 5);
p2 = new Point(10, 10);

p2的声明“覆盖”来自p1的5-5 ...因为,如上所述:所有点都使用相同 x和y。

因此,解决方案:只需从x和y的定义中删除该关键字。然后每个点都有自己的x和y。

而且,更重要的是:了解源代码中的每个字符和任何字符都很重要。这意味着:您可以更好地理解源代码正在使用的每个概念和任何概念!

答案 1 :(得分:0)

我相信因为你的x和y变量是静态的,所以它们属于整个Point类。当你创建一个Point(2,5); 将Point类的静态变量设置为2和5,然后创建另一个Point(4,6)将x和y的相同静态值设置为4,6。 因此,比较相同两点之间的距离为0。

Point类的正确代码就是这样

public class Point {

//Initializes the coordinates for a point on a graph with the values of x and y
private double x;
private double y;

//Defualt Constructor
public Point() {
    x = 0;
    y = 0;
}

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

//Returns the x value
public double getX() {
    return x;
}

//Changes the x value
public void setX(double x) {
    this.x = x;
}

//Returns the y value
public double getY() {
    return y;
}

//Changes the y value
public void setY(double y) {
    this.y = y;
}

//Calculates the distance between the class's point coordinates and another set of point coordinates
public double distance(double x0, double y0) {
    double distance = (Math.sqrt(((x0 - x) * 2.0) + ((y0 - y) * 2.0)));
    return distance;
}

//Calculates the distance between the class's point and another Point class's location
public double distance(Point p) {
    double distance = (Math.sqrt(((p.getX() - x) * (p.getX() - x)) + ((p.getY() - y) * (p.getY() - y))));
    return distance;
}

//Calculates the distance between a Point class's location and another Point class's location
public static double distance(Point p1, Point p2) {
    double distance = (Math.sqrt((Math.pow((p2.getX() - p1.getX()), 2.0) + (Math.pow((p2.getY() - p1.getY()), 2.0)))));
    return distance;