我试图让主程序反映三角形子类中抽象方法中返回的数据(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);
}
}
答案 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
的构造函数中计算Area
和Triangle
,然后您的其他代码也会起作用 - 并且只会计算一次。
答案 1 :(得分:0)
问题是您没有设置Perimeter
或Area
。
getArea
设置Area
,但永远不会被调用。
我的建议是完全删除这些变量,然后使用getPerimeter
和getArea
。
如果你想保留这些变量,建议将base
和height
设为私有,这样外部类就不能直接修改它们(这显然会改变周长和面积,但是他们赢了' t自动重新计算),并放置代码来更新setBase
和setHeight
中的边界和区域以及构造函数。然后,您还需要将Perimeter
和Area
设为私有,这样这些不会在外部进行修改。然后,您需要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());