将Point的值打印到终端

时间:2014-11-23 23:32:57

标签: java static points

我创建了一个类,可以找到两点之间的距离和它们之间的中点值:

public class Point {

    private double x;
    private double y;

    public Point (double x, double y) {

        this.x = x;
        this.y = y;
    }

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }

    public static void main (String[] args) {
        Point p1 = new Point(1,1);
        Point p2 = new Point(4,5);
        System.out.println("The distance between p1 and p2 is: " + distance(p1, p2));
        System.out.println("The midpoint of p1 and p2 is: " + findMidpoint(p1, p2));
    }

    public static double distance(Point p1, Point p2) {
         return Math.sqrt((p1.getX() - p2.getX()) *  (p1.getX() - p2.getX()) + 
                          (p1.getY() - p2.getY()) *  (p1.getY() - p2.getY()));
    }

    public static Point findMidpoint (Point p1, Point p2) {
        return new Point((p1.getX() + p2.getX()) / 2, (p1.getY() + p2.getY()) / 2);
    }
}

这段代码编译得很好,但是当我运行它时,它会输出:

The distance between p1 and p2 is: 5.0
The midpoint of p1 and p2 is: Point@15db9742

无论p1和p2的值如何,它都为中点提供相同的值。我想以“(x,y)”格式输出中点。

有人还能解释为什么我被迫将距离和findMidpoint方法设为静态吗?

3 个答案:

答案 0 :(得分:3)

为什么每次都会获得相同的输出?

因为您未覆盖toString方法。您看到的价值是Java toString的实现。每个对象都有这种行为。

将此方法放入点类中以覆盖java的toString实现。

@Override
public String toString(){
    return "("+x+", "+y+")";
}

这将按照您的要求为您提供(x, y)格式的输出。

为什么中点和距离是静止的?

静态方法是一种设计决策。它们可以写成非静态的,但由于这些方法不会改变所涉及的任何一个点对象的状态,所以它会变得不那么有意义。

答案 1 :(得分:2)

您需要创建toString()方法:

public String toString() {
    return String.format("Point(%f,%f)",x,y);
}

然后你得到:

java Point
The distance between p1 and p2 is: 5.0
The midpoint of p1 and p2 is: Point(2.500000,3.000000)

答案 2 :(得分:1)

Point@15db9742是"默认" Object#toString()的输出行为。如果要更改它,请覆盖此方法:

@Override
public String toString() {
    return "Point[" +
      "x=" + x +
      ", y=" + y +
      "]";
}

那应该打印:

Point[x=100.0, y=100.0]

代替。