问世间学为何物 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 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 MATLAB中streamslice问题
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序