问世间学为何物 2020-10-17 23:34 采纳率: 0%
浏览 71
已采纳

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

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

  • 写回答

1条回答 默认 最新

  • _YuLF 2020-10-18 18:52
    关注

    输出元素可以重写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}
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)