设计一个几何图形的面积计算器,希望这个计算器可以计算圆和矩形等图形的面积

主要要求如下。

(1) 编写一个抽象类Shape:该类中有两个抽象方法double area()和String getShapeName(),分别实现如下功能:各种具体的几何图形计算出自己的面积、和给出各自的图形名称。

(2) 编写Shap类的2个子类:Circle和Rectangle类。

(2.1)Circle中,重写 area() 方法,实现返回指定圆的面积(公式中 π 使用 Math.PI 计算);和重写getShapeName()方法,实现返回字符串“Circle”;

而且Circle中有1个成员变量,表示半径,即double r; ,设计一个构造函数Circle(double r),由参数r指定半径值。

(2.2)Rectangle中,重写 area() 方法,实现返回指定矩形的面积;和重写getShapeName()方法,实现返回字符串“Rectangle”。

而且Rectangle中有2个成员变量,分别表示高和宽,即double h,w;,设计一个构造函数Rectangle (double h, double w),由参数h,w指定高和宽的值。

(3) 编写图形面积计算器类Calculator:该类有一个void play (Shape shape) 方法,在该方法中先通过Shape 类型的参数shape调用其子类重写的getShapeName()方法,来获取该图形名称,再调用其子类重写的area()方法,来获取该图形的面积,最后按一定格式将这些信息输出(输出时小数位数保留2位)。

 (4) 主类Main,在该类的main方法中包含如下代码,实现让面积计算器可以计算相应的图形的面积。其中:

       (4.1)如果键盘输入“1”回车,表示计算圆形面积,接着输入圆形的半径值如10,则输出:Circle:314.16;

       (4.2)如果键盘输入“2”回车,表示计算矩形面积,接着输入矩形的高与宽值如10与2,则输出:Rectangle:20.00;

       (4.3)如果键盘输入其他值,则输出:No corresponding shape!。

输入的第一行是一个数字,1对应圆,2对应矩形,其他输入没有对应图形。

输入的第二行是更加第一行的选择进行的。

输入格式:

由键盘输入两行

输入的第一行是一个数字(其中1对应圆,2对应矩形,其他输入值没有对应图形)。

输入的第二行是根据第一行的选择进行的。若第一行输入1,则第二行输入一个半径值;若第一行输入2,则输入两个数字,分别为高与宽。若输入除了1和2的其他整数,则不用输入第二行。

输出格式:

输出1行,显示:图形名称和图形面积(输出时保留2为小数),中间用英文状态下的冒号隔开,例如:Rectangle:20.00

若输入除了1和2的其他整数,屏幕显示:No corresponding shape!

输入样例:

1

10

输出样例:

Circle:314.16

输入样例:

5

输出样例:

No corresponding shape!

import java.util.Scanner;                         //加载Scanner类

abstract class Shape {                            //创建一个抽象类Shape
    abstract double area();                       //创建两个抽象方法
    abstract String getShapeName();
}

class Circle extends Shape{                      //创建一个子类,继承抽象类,因为为非抽象子类,必须重写父类的抽象方法
    double r;                                    //创建一个对象;
    Circle(double r){                            //创建半径r
        this.r=r;
    }
    double area(){                               //返回圆形的面积
        return r*r*Math.PI;
    }

    String getShapeName() {                       //返回图形的类型
        return "Circle";
    }
}

class Rectangle extends Shape{                    //创建一个矩形子类,同上,需要重写方法
    double h;
    double w;
    Rectangle(double h,double w){
        this.h=h;
        this.w=w;
    }
    double area(){
          return h*w;
    }
    String getShapeName(){
        return "Rectangle";
    }
}

class Calculator{                                         //创建一个计算类
    public void play(Shape shape) {                       //创建一个计算方法,并创建一个Shape对象,用于运用其方法
        System.out.printf("%s:%.2f",shape.getShapeName(),shape.area());
    }
}

public class Test {
    public static void main(String[] args) {
        Calculator  calculator =new Calculator ();          //创建Calculator对象
        Scanner sc=new Scanner(System.in);                 //用于输入
        int ch=sc.nextInt();
        switch(ch){                                        //使用Switch结构
            case 1:                                        //输入1则调用求圆的面积
                double r=sc.nextDouble();
                calculator.play(new Circle(r));break;
            case 2:                                        //输入2则求矩形的面积
                double h=sc.nextDouble();
                double w=sc.nextDouble();
                calculator.play(new Rectangle(h,w));break;
            default:                                       //若既没有输入1,也没有输入2,则返回错误提示
                System.out.println("No corresponding shape!");
        }
    }
}

 

 

 

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值