【问题标题】:Java toString() method overrideJava toString() 方法覆盖
【发布时间】:2017-10-05 00:15:02
【问题描述】:

通过这两个课程,我正在制作方形物体,为明天的考试做准备。 S1 是使用默认创建的,S2 是通过非默认创建的。由于某种原因,它会将除 Side 之外的所有值打印为 0。请帮助。

public class SquareRunner{
public static void main(String[] args)
{
    Square S1 = new Square();
    Square S2 = new Square(4);
    System.out.println(S1.toString());
    System.out.println(S2.toString());
}
}

import java.lang.Math;

public class Square
{

private int s, a, p;
private double d;
public Square()
{
    s = 1;
}
public Square(int side)
{
    s = side;
}
public int getSide()
{
    return s;
}
public int getArea()
{
    a = s * s;
    return a;
}
public double getDiagonal()
{
    double d;
    d = Math.sqrt(Math.pow(s,2) + Math.pow(s,2));
    return d;
}
public int getPerimeter()
{
    p = 4 * s;
    return p;
}
public String toString()
{
    return "Side: " + s + " Perimeter: " + p + " Area: " + a + " Diagonal: " 
+ d;
}
}

【问题讨论】:

  • 您何时计算面积、周长和对角线的值?你没有得到价值,因为此时那里什么都没有
  • 还有,为什么在所有这些方法中都有 int side 作为参数?那没有意义。例如,看看你的 get side 方法。那里的 int 是什么?
  • 我应该在哪里计算面积、周长和对角线?在 RectangleRunner 类中?
  • 你需要在你的 toString() 中修复它。但在你这样做之前,你需要修复你在每个方法中都有的这个 int 方面的东西。
  • 我取出了 int 端,但是如何调用 toString() 中的函数?

标签: oop printing tostring


【解决方案1】:

试试这个

public String toString()
{
    return "Side: " + s + " Perimeter: " + this.getPerimeter() + " Area: " + this.getArea() + " Diagonal: " 
    + this.getDiagonal();
}

如果要打印周长、面积和对角线,则必须计算要打印的这些值。

如果你想在你的 SquareRunner 类中打印这些,那么你可以这样做

public class SquareRunner{
public static void main(String[] args)
   {
     Square S1 = new Square();
     Square S2 = new Square(4);

     System.out.println(S1.getArea());
     ...
     ...

 }

}

【讨论】:

  • 它现在可以工作了,你能解释一下为什么会这样吗?我对 Java 有点陌生,谢谢。
  • 因此您创建了一个名为 Square 的类。当您在 Squarerunner 中创建 square 的实例时,它会调用构造函数。您的构造函数仅设置 side 的值。它没有计算面积、周长或对角线。如果您想打印出面积、周长或对角线的值,您需要先计算它们。当您计算它们时,它会返回一个值。该值就是您要打印的值
  • 既然 toString 是你打印出来的,那么你必须在那里计算它。
  • @Ryan Marvin 你的困惑是正常的,但不是因为它是java。您对面向对象编程感到困惑。我记得那些日子,但你需要看看它是如何工作的。
  • 因此,如果我想事先计算它,而不必使用“this”。我该怎么做?
猜你喜欢
  • 2018-01-10
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多