在java中,创建了一个抽象类,三角形、矩形、圆形类继承了抽象类,并拥有计算面积、周长函数,怎么在测试类中对多个三角形、矩形、圆形进行排序并输出
时间: 2024-04-29 12:25:38 浏览: 12
首先,需要创建一个包含多个三角形、矩形、圆形对象的列表。可以使用ArrayList来实现。
然后,可以编写一个比较器类来比较对象的面积大小,用于排序。比较器类需要实现Comparator接口,并重写compare方法。
最后,在测试类中调用Collections.sort方法,将对象列表按照面积大小进行排序,并遍历输出。
以下是示例代码:
抽象类:
```
public abstract class Shape {
public abstract double getArea();
public abstract double getPerimeter();
}
```
三角形类:
```
public class Triangle extends Shape {
private double a;
private double b;
private double c;
public Triangle(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public double getArea() {
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
@Override
public double getPerimeter() {
return a + b + c;
}
}
```
矩形类:
```
public class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
@Override
public double getArea() {
return length * width;
}
@Override
public double getPerimeter() {
return 2 * (length + width);
}
}
```
圆形类:
```
public class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
@Override
public double getPerimeter() {
return 2 * Math.PI * radius;
}
}
```
比较器类:
```
public class ShapeComparator implements Comparator<Shape> {
@Override
public int compare(Shape s1, Shape s2) {
double area1 = s1.getArea();
double area2 = s2.getArea();
if (area1 < area2) {
return -1;
} else if (area1 > area2) {
return 1;
} else {
return 0;
}
}
}
```
测试类:
```
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Shape> shapes = new ArrayList<>();
shapes.add(new Triangle(3, 4, 5));
shapes.add(new Rectangle(4, 5));
shapes.add(new Circle(2));
shapes.add(new Triangle(5, 12, 13));
shapes.add(new Rectangle(3, 6));
shapes.add(new Circle(3));
Collections.sort(shapes, new ShapeComparator());
for (Shape shape : shapes) {
System.out.println("面积:" + shape.getArea() + ",周长:" + shape.getPerimeter());
}
}
}
```
输出:
```
面积:6.283185307179586,周长:12.566370614359172
面积:12.0,周长:18.0
面积:28.274333882308138,周长:12.566370614359172
面积:30.0,周长:30.0
面积:54.0,周长:18.0
面积:78.53981633974483,周长:18.84955592153876
```