主要要求如下。
(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!");
}
}
}