将对象转换为sysout输出中的String,java

时间:2015-11-14 18:46:44

标签: java eclipse

我一直试图弄清楚如何使用toString()方法使系统println看起来有意义,但我不知道我应该在哪里准确地使用这个方法来使代码看起来正确。 所以我添加所有构造函数+ getter和settes的类点是:

public class Point {
double x, y;
public Point() {
    x = 0;
    y = 0;
}
public Point (double z) {
     this.x = z;
    this.y = z;
}
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;
}
void setXY(double x, double y) {
    if ( x == y) {
        return;
    }
    this.x = x;
    this.y = y;
  }
    public double odlegloscDo(Point p) {
    return Math.sqrt(Math.pow(x, x) + Math.pow(y, y));
    }
    }

然后在main方法中,我将所有日期与新对象和我想要做的事情放在一起。并添加了一个简单公式的方法来执行我创建的对象的字段。如下所示:

public class Odleglosc {

public static  void main(String[] args) {

Point p1 = new Point();
Point p2 = new Point(2);
Point p3 = new Point(1,5);

System.out.println("p1: " + p1);
System.out.println("p2: " + p2);
System.out.println("p3: " + p3);
System.out.println("p3 equals p1 = " + p3.equals(p1));

double odleglosc = 0.0;
if (!p3.equals(p1)) {
odleglosc = p1.odlegloscDo(p3);
System.out.println("Odleglosc  p1 -> p3  = " + odleglosc);


}

p3.setX(-9);
p2.setY(p3.getY());
double sum = p3.getX() + p2.getX();
p1.setX(sum);

System.out.println("================================");
System.out.println("p1: " + p1);
System.out.println("p2: " + p2);
System.out.println("p3: " + p3);

    }
}

所以,主要的问题是我得到了这个输出:

p1: zajecia4.Point@139a55
p2: zajecia4.Point@1db9742
p3: zajecia4.Point@106d69c
p3 equals p1 = false
Odleglosc  p1 -> p3  = 1.4142135623730951
================================
p1: zajecia4.Point@139a55
p2: zajecia4.Point@1db9742
p3: zajecia4.Point@106d69c

我知道toString()方法是如何工作的,我只是不知道在哪里放置它以及如何使打印输出对我的代码有意义。请帮助我,否则在java的课程上前进将是艰难的,我的导师实际上无法正确解释。 另一件事是我的导师说在我的代码中我也应该把equals方法放在某个地方,但是我对此无法理解。我已经把它放在我的if指令中了,但是我应该在哪里放置equals方法以便正确地比较字段?

1 个答案:

答案 0 :(得分:1)

toString方法返回对象的字符串表示形式。你需要以这种方式覆盖它:

public class Point {
    double x, y;
    ...

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

输出将是:

p1: 0 - 0
p2: 2 - 0
p3: 1 - 5

关于Equals方法,它也可以用同样的方式覆盖:

public class Point {
    double x, y;
    ...

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

    @Override
    public boolean equals(Point point) {
        return this.x == point.x && this.y = point.y;
    }
}

.equals方法的实用之处在于它允许您测试值'平等,而非参考平等(通常使用' =='来实现。)