用继承、重写、面向对象来完成下列任务。工厂切割金属板材后,会产出很多圆形或者矩形的废弃材料。工厂新采购了一套激光测距工具,可以远距离测量圆形的半径和矩形的长和宽。 现在已经完成测量工作,需要用程序计算出这批废弃材料中面积最大和最小的形状。 输入 第1行为废弃材料的数量n。 此后的n行,为n个废弃材料的形状和数据。 例如: circle 5,表示半径为5的圆形; rectangle 3 4,表示长为3、宽为4的矩形。 输出 输出1行,最大的形状面积,输出面积向下取整的整数 编程要求 根据提示,在右侧编辑器补充代码,计算并输出。 测试说明 平台会对你编写的代码进行测试: 测试输入: 6 circle 5.1 rectangle 3.1 4.2 circle 6.5 rectangle 3.5 4.5 circle 5 rectangle 5.3 6.4 预期输出: 132
时间: 2024-03-12 17:50:05 浏览: 56
下面是Java语言的代码实现:
```java
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
ArrayList<Shape> shapes = new ArrayList<>();
for (int i = 0; i < n; i++) {
String type = scanner.next();
if (type.equals("circle")) {
double radius = scanner.nextDouble();
Circle circle = new Circle(radius);
shapes.add(circle);
} else if (type.equals("rectangle")) {
double width = scanner.nextDouble();
double height = scanner.nextDouble();
Rectangle rectangle = new Rectangle(width, height);
shapes.add(rectangle);
}
}
double maxArea = Double.MIN_VALUE;
double minArea = Double.MAX_VALUE;
for (Shape shape : shapes) {
double area = shape.getArea();
if (area > maxArea) {
maxArea = area;
}
if (area < minArea) {
minArea = area;
}
}
System.out.println((int) Math.floor(maxArea));
}
}
abstract class Shape {
public abstract double getArea();
}
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
}
class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public double getArea() {
return width * height;
}
}
```
该程序中,首先利用Scanner类读取输入数据,然后根据不同的形状类型创建不同的Shape子类对象,将这些对象添加到ArrayList中。接下来,遍历ArrayList中的Shape对象,计算每个对象的面积,并更新最大和最小面积值。最后,输出最大面积,使用Math.floor()方法向下取整为整数。需要注意的是,由于Shape是抽象类,因此需要定义Circle和Rectangle子类,并实现getArea()方法来计算面积。
阅读全文