【问题标题】:convert object to String in sysout output, java在 sysout 输出中将对象转换为字符串,java
【发布时间】:2015-11-14 18:46:44
【问题描述】:

我一直在试图弄清楚如何使用 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 方法以便正确比较字段?

【问题讨论】:

    标签: java eclipse


    【解决方案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 方法的实用性在于它允许您测试 值的相等性,而不是 引用相等性(通常使用 '==' )。

    【讨论】:

    • 您忘记了 toString() 中的“+”号
    • 是的,确实如此。谢谢。
    • 谢谢。这对我帮助很大!然而,当涉及到更多扭曲的子类时,我又遇到了一个问题,也许你也可以看看我关于这个方法的另一个问题:stackoverflow.com/questions/33792078/…
    • @KarinaSmrn toString 方法不带参数。这就是你的错误的原因。
    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 2011-08-30
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多