Java复习18(PTA)

面积求和

分数 15

全屏浏览

切换布局

作者 yl

单位 西南石油大学

由于各种图形 求面积的方式不一样,为了使编写的程序能够适应求不同形状的面积和,当新增加一个图形的时候,不需要修改其他类,采用面向接口的编程,其类图如下图所示:

绘图1.jpg

根据以上类图,你需要设计和编写如下类:
######1.IGeometry接口类 ,里面有double getArea()接口方法
2.Rect类实现接口,有属性 a,b,有参构造方法及对接口方法的实现
######3.Circle类实现接口,有属性r,有参构造方法及对接口方法的实现,其中PI=3.14
4.TotalArea类完成对不同形状图形面积求和,有属性IGeometry[] tuxing 数组用来存储 不同形状图形对象,SetTuxing(IGeometry[] t) 给属性tuxing赋值,double computeTotalArea()方法用来计算tuxing数组中存放的图形的面积和,并返回面积和。

主类已经给出,请结合主类完成上面类的编写

裁判测试程序主类:

public class Main {

    public static void main(String[] args) {
         IGeometry [] tuxing=new IGeometry[29]; //有29个Geometry对象
          for(int i=0;i<tuxing.length;i++) {   //29个Geometry对象分成两类
              if(i%2==0)
                  tuxing[i]=new Rect(16+i,68);
              else if(i%2==1)
                  tuxing[i]=new Circle(10+i);
          } 
          TotalArea computer=new TotalArea();
          computer.setTuxing(tuxing);  
          System.out.printf("各种图形的面积之和:\n%.2f",computer.computerTotalArea());

    }
}

/* 请在这里填写答案  请结合主类代码,在代码框完成IGeometry接口类,Rect类,Circle类和TotalArea类*/

输入样例:

在这里给出一组输入。例如:

输出样例:

在这里给出相应的输出。例如:

各种图形的面积之和:
58778.36

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

interface IGeometry {
    double getArea();
}

class Rect implements IGeometry {
    double a;
    double b;

    public Rect(double a, double b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public double getArea() {
        // TODO Auto-generated method stub
        return this.a * this.b;
    }

}

class Circle implements IGeometry {
    double r;

    public Circle(double r) {
        this.r = r;
    }

    @Override
    public double getArea() {
        // TODO Auto-generated method stub
        return 3.14 * r * r;
    }
}

class TotalArea {
    IGeometry[] tuxing;

    public void setTuxing(IGeometry[] tuxing) {
        this.tuxing = tuxing;
    }

    public double computerTotalArea() {
        double sum = 0;
        for (IGeometry i : tuxing) {
            sum += i.getArea();
        }
        return sum;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值