首页 > 解决方案 > 当从我的主方法调用时,我在子类中的 toString 方法返回零

问题描述

我有使用抽象类作为超类“形状”的任务。它具有三个扩展该类的类,Triangle、Circle 和 Square。每个类都应该计算这些形状的面积和周长。当我System.out.println(shapeArray[i].computeArea());在一个 for 循环中时,我有一些工作。但是,当我尝试从该 for 循环中的子类调用 toString 方法时,所有内容都返回为“0”。我感谢任何花时间提供帮助的人,因为我很困在这里。我觉得我整天都在阅读、重新阅读主题和教科书。我觉得这里只是有一些我看不到的愚蠢错误。

形状.java

public class Circle extends Shape {

    private double radius;
    final private double PI = 3.14159;
    private double circumfrence;
    private double area;

    Circle(double radius) {

        this.radius = radius;
    }

    @Override
    public double computeArea() {
        double radSquared = radius * radius;
        double area = PI * radSquared;
        return area;
    }

    @Override
    public double computePerimeter() {
        circumfrence = 2 * PI * radius;
        return circumfrence;
    }

    @Override
    public String toString() {
        return  "Area of Circle: " +area + "\nCircumfrence of Circle: " + circumfrence;
    }

}

三角.java

public class Triangle extends Shape {

    private double side1;
    private double side2;
    private double side3;
    private double area;
    private double perimeter;


    Triangle (double side1, double side2, double side3) {
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
    }

    @Override
    public double computeArea() {
          double s =(side1 + side2 + side3) / 2;
          double area= Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));
          area = this.area;
          return area;
    }

    @Override
    public double computePerimeter() {
        perimeter = side1 + side2 + side3;
        return perimeter;
    }

    @Override
    public String toString() {
        return "Area of Triangle: " + area+ "\nPerimeter of Triangle: " + perimeter;
    }

}

Circle.java

public class Circle extends Shape {

    private double radius;
    final private double PI = 3.14159;
    private double circumfrence;
    private double area;

    Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double computeArea() {
        double radSquared = radius * radius;
        double area = PI * radSquared;
        return area;
    }

    @Override
    public double computePerimeter() {
        circumfrence = 2 * PI * radius;
        return circumfrence;
    }

    @Override
    public String toString() {
        return  "Area of Circle: " +area + "\nCircumfrence of Circle: " + circumfrence;
    }

}

矩形.java

public class Rectangle extends Shape {

    private double length;
    private double height;
    private double sumOfLength;
    private double sumOfHeight;
    private double area;
    private double perimeter;

    Rectangle(double length, double height) {
        this.height = height;
        this.length = length;
    }

    @Override
    public double computeArea() {
        area = (length * height);
        return area;
    }

    @Override
    public double computePerimeter() {
        sumOfLength = length * 2;
        sumOfHeight = height * 2;
        perimeter = sumOfLength + sumOfHeight;
        return perimeter;
    }

    @Override
    public String toString() {
        return "Area of Rectangle: " +area + "\nPerimeter of Rectangle: " + perimeter;
    }

}

ShapeArray.java

public class ShapeArray {

    public static void main(String [] args) {

        Shape shapeArray[] = new Shape[3];

        Circle circ = new Circle(9);
        Rectangle rect = new Rectangle(10, 6);
        Triangle tri = new Triangle(6, 8, 12);

        shapeArray[0] = circ;
        shapeArray[1] = rect;
        shapeArray[2] = tri;

        for (int i = 0; i <= 2; i++) {
            System.out.println(shapeArray[i].toString());
        }
    }
}

输出:

Area of Circle: 0.0
Circumfrence of Circle: 0.0
Area of Rectangle: 0.0
Perimeter of Rectangle: 0.0
Area of Triangle: 0.0
Perimeter of Triangle: 0.0

标签: javaabstracttostring

解决方案


您的类Triangle.computeArea方法将 from 更改area = this.area;this.area=area; Other 类,如下所示。


推荐阅读