7-5 图形继承与多态 (50 分)

**

7-5 图形继承与多态 (50 分)

**
掌握类的继承、多态性及其使用方法。具体需求参见作业指导书。
2021-OO第06次作业-5指导书V1.0.pdf

解题报告
1.深入理解继承与多态的原理及用法
2.ArrayList常用方法及和数组的关系
3.泛型的应用
4.Arrays及Collections的简单应用
** 必须使用面向对象的封装性、继承性及多态性解题,否则一律判定为0分。**

输入格式:

从键盘首先输入三个整型值(例如a b c),分别代表想要创建的Circle、Rectangle及Triangle对象的数量,然后根据图形数量继续输入各对象的属性值(均为实型数),数与数之间可以用一个或多个空格或回车分隔。

输出格式:

如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边关系),则输出Wrong Format。
如果输入合法,则正常输出,输出内容如下(输出格式见输入输出示例):
各个图形的面积;
所有图形的面积总和;
排序后的各个图形面积;
再次所有图形的面积总和。

输入样例1:

1 1 1 2.3 3.2 3.2 6.5 3.2 4.2

输出样例1:

Original area:
16.62 10.24 5.68
Sum of area:32.54
Sorted area:
5.68 10.24 16.62
Sum of area:32.54

输入样例2:

0 2 2 2.3 2.5 56.4 86.5 64.3 85.6 74.6544 3.2 6.1 4.5

输出样例2:

Original area:
5.75 4878.60 2325.19 7.00
Sum of area:7216.54
Sorted area:
5.75 7.00 2325.19 4878.60
Sum of area:7216.54

输入样例3:

0 0 1 3 3 6

输出样例3:

Wrong Format


import java.util.Scanner;
import java.util.Arrays;


//Shape类
abstract class Shape{
    public abstract double Mj();
}
//Circle类
class Circle extends Shape{
    private double r;
    public Circle(double r){
        super();
        this.r=r;
    }
    //getter
    public double getR(){
        return r;
    }
    //setter
    public void setR(double r){
        this.r = r;
    }

    public double Mj(){//计算圆面积
        return Math.PI*r*r;
    }
}
//Rectangle类
class Rectangle extends Shape{
    private double a,b;
    public Rectangle(double a, double b){
        super();
        this.a=a;
        this.b=b;
    }
    //getter
    public double A(){
        return a;
    }
    public double B(){
        return b;
    }
    //setter
    public void setA(double a){
        this.a=a;
    }
    public void setB(double b){
        this.b=b;
    }

    public double Mj(){//计算矩形面积
        return a*b;
    }
}
//Triangle类
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;
    }
    //getter
    public double A(){
        return a;
    }
    public double B(){
        return b;
    }
    public double C(){
        return c;
    }
    //setter
    public void setA(double a){
        this.a=a;
    }
    public void setB(double b){
        this.b=b;
    }
    public void setC(double c){
        this.c=c;
    }
    public double Mj(){//计算三角形面积
        double s1,s2;
        s1=(a+b+c)/2;
        s2=Math.sqrt(s1*(s1-a)*(s1-b)*(s1-c));
        return s2;
    }
}
//主类
public class Main{
    public static void main(String[] args){
        Scanner x = new Scanner(System.in);
        int q,w,e,gs=0,h;//个数
        q=x.nextInt();w=x.nextInt();e=x.nextInt();

        if(q<0||w<0||e<0){//如果不合法
            System.out.println("Wrong Format");
            System.exit(0);
        }

        h=q+w+e;
        double[] he=new double [q+w+e];
        double zh=0;
        int i,flag=0;
        Shape []c=new Circle[q];
        Shape []r=new Rectangle[w];
        Shape []t=new Triangle[e];

        for(i=0;i<q;i++){//三角形
            double bj;
            bj=x.nextDouble();//输入半径
            if(bj<=0){//判断是否合法
                flag=1;
            }
            c[i]=new Circle(bj);//把半径传入Circle类
            zh=zh+c[i].Mj();//计算总面积
            he[gs]=c[i].Mj();//把面积传入数组he
            gs++;
        }

        for(i=0;i<w;i++){//矩形
            double db;
            double cb;
            db=x.nextDouble();cb=x.nextDouble();//输入边长
            if(db<0||cb<0){//判断是否合法
                flag=1;
            }
            r[i]=new Rectangle(db,cb);//把边长传入Rectangle类
            zh=zh+r[i].Mj();//计算总面积
            he[gs]=r[i].Mj();//把面积传入数组he
            gs++;

        }

        for(i=0;i<e;i++){//三角形
            double a;
            double b;
            double d;
            double[] three=new double[3];
            three[0]=x.nextDouble();three[1]=x.nextDouble();three[2]=x.nextDouble();//输入边长
            Arrays.sort(three);//三边从小到大排序
            a=three[0];b=three[1];d=three[2];
            if(a<0||b<0||d<0||a+b<=d){//判断是否合法
                flag=1;
            }
            t[i]=new Triangle(a,b,d);//把边长传入Triangle类
            zh=zh+t[i].Mj();//计算总面积
            he[gs]=t[i].Mj();//把面积传入数组he
            gs++;
        }

        if(flag==1){//如果输入的不合法
            System.out.println("Wrong Format");
            System.exit(0);
        }


        System.out.println("Original area:");
        for (i=0;i<h;i++){
            System.out.printf("%.2f ",he[i]);
        }
        System.out.printf("\nSum of area:%.2f\n",zh);
        System.out.println("Sorted area:");
        Arrays.sort(he);
        for(i=0;i<h;i++){
            System.out.printf("%.2f ",he[i]);
        }
        System.out.printf("\nSum of area:%.2f",zh);

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值