如何在main中从抽象方法返回数据

时间:2014-02-20 09:12:10

标签: java

我试图让主程序反映三角形子类中抽象方法中返回的数据(Area和Perimeter)。无论我尝试什么,它总是打印“0.0”。

关于如何打印区域和周边的任何指示?

主要:

public class MainExecute {
    public static void main(String[] args) {
        Triangle Shape01 = new Triangle (4,6);
        Square Shape02 = new Square (5);
        Trapezoid Shape03 = new Trapezoid (4,3,6);
        Shape01.printTriangle();
        Shape02.printSquare();
        Shape03.printTrapezoid();
    }
}

形状抽象类:

public abstract class Shape {
    public abstract double getPerimeter ();
    public abstract double getArea ();

    public double Perimeter;
    public double Area;
}

三角子类:

public class Triangle extends Shape{
    @Override
    public double getPerimeter (){
        double triPem;
        triPem = ((Math.sqrt(((this.base / 2)* (this.base / 2)) + (this.height * this.height))) * 2) + this.base;
        return triPem;
    }

    @Override
    public double getArea (){
        Area = (base * height) / 2;
        return Area;
    }

    public double base;
    public double height;

    public double getBase() {
        return base;
    }

    public void setBase(double base) {
        this.base = base;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public Triangle (double base, double height){
        this.base = base;
        this.height = height;
    }

    public void printTriangle(){
        System.out.println("The perimeter of this shape is " + Perimeter);
        System.out.println("The Area of this shape is " + Area);
    }        
}

5 个答案:

答案 0 :(得分:1)

尝试

public void printTriangle(){
    System.out.println("The perimeter of this shape is " + getPerimeter());
    System.out.println("The Area of this shape is " + getArea());
}

然后你也可以放弃

public double Perimeter;
public double Area;

因为你每次都要重新计算它们。

另一种可能性是在Perimeter的构造函数中计算AreaTriangle,然后您的其他代码也会起作用 - 并且只会计算一次。

答案 1 :(得分:0)

问题是您没有设置PerimeterArea

getArea设置Area,但永远不会被调用。

我的建议是完全删除这些变量,然后使用getPerimetergetArea

如果你想保留这些变量,建议将baseheight设为私有,这样外部类就不能直接修改它们(这显然会改变周长和面积,但是他们赢了' t自动重新计算),并放置代码来更新setBasesetHeight中的边界和区域以及构造函数。然后,您还需要将PerimeterArea设为私有,这样这些不会在外部进行修改。然后,您需要get个函数来返回它们,然后需要一个update函数来更新它们(这看起来与您当前的get函数类似)。相当一个扩展的过程,这就是为什么我只是建议删除它们。

答案 2 :(得分:0)

问题是您在打印前不执行计算。

如果您先调用有效的方法,那么您将获得正确的结果

Shape01.getPerimeter();
Shape01.getArea ();
Shape01.printTriangle();

注意:

你还应该看看另外两件事:

Shape01 Area等变量不应以大写字母开头。在Java中,变量位于camel case

第二个是抽象类的设计。

字段

公共双周长; 公共双区;

存取

public abstract double getPerimeter(); public abstract double getArea();

当您设计一个抽象类时,您可以创建一个在任何情况下均可使用的合同。在这种情况下,您可以打破它,因为要初始化您必须调用的字段的值执行某些操作。要改进您的设计,请从抽象类中删除这些字段,并使用方法调用替换该事件。这将确保结果始终是最新的。并防止你现在遇到的问题。

答案 3 :(得分:0)

  

无论我尝试什么,它总是打印“0.0”

那是因为你没有初始化它们,也没有在使用它们之前分配一些值。因此,他们被分配了默认值0.00

答案 4 :(得分:0)

使用类似的东西:

System.out.println("The perimeter of this shape is " + getPerimeter());
System.out.println("The area of this shape is " + getArea());