Java新人求助,求此题代码如何编写,谢谢大佬们!

定义一个抽象基类Shape,它包含抽象方法getArea(),从Shape类派生出Circle和Rectangle类,这两个类都用getArea()方法计算对象的面积。在主函数中,定义一个Shape数组,存入n个Rectangle类和Circle类的对象,并找出数组中面积最小的元素。
我的问题主要在于,如何输出这个元素?

1个回答

输出元素可以重写toString方法;
下面是具体得实现,分别用到了【抽象工厂设计模式】【冒泡排序】

抽象基类

public abstract class Shape {
    public abstract int getArea();
}

两个子实现类

public class Rectangle extends Shape {
    private int area;
    //假设这个形状得面积为传进来得值”假设“
    public Rectangle(int i){
        this.area =i;
    }

    @Override
    public int getArea() {
        //具体计算面积的参数,得看你业务中得参数,可以通过构造函数在创建对象时传参进来进行计算面积
        //具体你业务中计算长方形的面积, 最后返回的是这个面积的值,
        return this.area;
    }

    @Override
    public String toString() {
        return "Rectangle{" +
                "area=" + area +
                '}';
    }
}
public class Circle extends Shape {
    private int area;
    //假设这个形状得面积为传进来得值”假设“
    public Circle(int i){
        this.area =i;
    }
    @Override
    public int getArea() {
        //具体计算面积的参数,得看你业务中得参数,可以通过构造函数在创建对象时传参进来进行计算面积
        //具体你业务中计算长方形的面积 最后返回的是这个面积的值...
        return this.area;
    }

    @Override
    public String toString() {
        return "Circle{" +
                "area=" + area +
                '}';
    }
}

主函数

public class TestMain {
    public static void main(String[] args){

        //定义一个Shape数组
        Shape[] shapes = new Shape[10];
        //模拟存入10个/n个Rectangle类和Circle类的对象
        for(int i =0;i<5;i++){
            shapes = addElement(shapes,new Rectangle(randomArea()));
            shapes = addElement(shapes,new Circle(randomArea()));
        }
        System.out.println("Shape数组中得所有元素列表:"+Arrays.asList(shapes));
        //并找出数组中面积最小的元素。
        for(int i=0;i<shapes.length-1;i++)
        {
            for(int j=0;j<shapes.length-1-i;j++)
            {
                if(shapes[j].getArea()>shapes[j+1].getArea())
                {
                    Shape temp=shapes[j];
                    shapes[j]=shapes[j+1];
                    shapes[j+1]=temp;
                }
            }
        }
        System.out.println("Shape数组面积经过冒泡排序后得元素列表:"+Arrays.asList(shapes));
        System.out.println("Shape数组面积最小得元素是:"+shapes[0]);

    }

    /**
     * 随机一个数作为形状对象得面积(真正得面积是你自己再类得getArea计算,我这里只是模拟)
     * @return
     */
    public static int randomArea(){
        return new Double(Math.random()*100).intValue();
    }
    /**
     *
     * @param shapes
     * @param shape 需要添加得元素
     * @return
     */
    public static Shape[] addElement(Shape[] shapes,Shape shape){
        for(int i =0;i<shapes.length;i++){
            if(shapes[i] == null){
                shapes[i] = shape;
                break;
            }
        }
        return shapes;
    }
}

输出

Shape数组中得所有元素列表:[Rectangle{area=19}, Circle{area=72}, Rectangle{area=61}, Circle{area=17}, Rectangle{area=3}, Circle{area=69}, Rectangle{area=39}, Circle{area=66}, Rectangle{area=63}, Circle{area=96}]

Shape数组经过冒泡排序后得元素列表:[Rectangle{area=3}, Circle{area=17}, Rectangle{area=19}, Rectangle{area=39}, Rectangle{area=61}, Rectangle{area=63}, Circle{area=66}, Circle{area=69}, Circle{area=72}, Circle{area=96}]

Shape数组最小得元素是:Rectangle{area=3}
立即提问