abstract class Figure {
abstract double calculatePerimeter();
abstract double calculateArea()
public class Rectangle extends Figure {
double a;
double b;
public Rectangle(double a, double b) {
this.a = a;
this.b = b;
}
@Override
double calculatePerimeter() {
return 2 * (a + b);
}
@Override
double calculateArea() {
return a * b;
}
}
public class Triangle extends Figure {
double a;
double b;
double c;
public Triangle(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
double calculatePerimeter() {
return a + b + c;
}
@Override
double calculateArea() {
double p = calculatePerimeter() / 2.0;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
所以我应该创建一个数字列表并在方法中使用,但这不起作用
Figure[] figures=new Figure[3];
figures[1]=new Square(4.6);
figures[2]=new Rectangle(4.5,5.2);
figures[3]=new Triangle(6,5,2.2);
public static double findSquare(????????) {
return square.calculateArea() + rectangle.calculateArea() + triangle.calculateArea();
它应该如何工作?我应该阅读哪个主题? 请解释
答案 0 :(得分:1)
由于您使用继承并且在每个子图(正方形,矩形,三角形)上实现了calculateArea
,因此您要做的就是遍历图数组并对所有calculateArea
求和数字:
public static double findSquare(Figure[] arr) {
double sum = 0;
for (int i : arr) {
sum = sum + arr[i].calculateArea();
}
return sum;
注意:我真的认为您应该阅读并了解如何使用Java Inheritance和Arrays
答案 1 :(得分:0)
您应该在数组上循环/流式处理,然后通过调用多态方法calculateArea
将每个元素映射到面积值,最后求和。
java流示例:
double sumOfArea = Arrays.stream(arrayOfFigure).mapToDouble(Figure::calculateArea).sum()