用Java写PTA 7-1 sdut-oop-6 计算各种图形的周长(多态)
定义接口或类 Shape,定义求周长的方法length()。
定义如下类,实现接口Shape或父类Shape的方法。
(1)三角形类Triangle (2)长方形类Rectangle (3)圆形类Circle等。
定义测试类ShapeTest,用Shape接口(或类)定义变量shape,用其指向不同类形的对象,输出各种图形的周长。并为其他的Shape接口实现类提供良好的扩展性。
提示: 计算圆周长时PI取3.14。
输入格式:
输入多组数值型数据(double);
一行中若有1个数,表示圆的半径;
一行中若有2个数(中间用空格间隔),表示长方形的长度、宽度。
一行中若有3个数(中间用空格间隔),表示三角形的三边的长度。(需要判断三个边长是否能构成三角形)
若输入数据中有0或负数,则不表示任何图形,周长为0。
输出格式:
行数与输入相对应,数值为根据每行输入数据求得的图形的周长。
输入样例:
在这里给出一组输入。例如:
1
2 3
4 5 6
2
-2
-2 -3
输出样例:
在这里给出相应的输出。例如:
6.28
10.00
15.00
12.56
0.00
0.00
import java.util.Scanner;
class Shape{
public double length(){
return 0.0;
}
}
class Triangle extends Shape{
private double a;
private double b;
private double c;
Triangle(double a,double b,double c){
if(a>0&&b>0&&c>0&&(a+b)>c&&(b+c)>a&&(a+c)>b){
this.a=a;
this.b=b;
this.c=c;
}
else {
this.a=0.0;
this.b=0.0;
this.c=0.0;
}
}
public double length(){return a+b+c;}
}
class Rectangle extends Shape{
private double a;
private double b;
Rectangle(double a,double b){
if(a>0&&b>0){
this.a=a;
this.b=b;
}
else {
this.a=0.0;
this.b=0.0;
}
}
public double length(){return 2*(a+b);}
}
class Circle extends Shape{
private double a;
Circle(double a){
if(a>0){
this.a=a;
}
else {
this.a=0.0;
}
}
public double length(){return 2*3.14*a;}
}
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNextLine()){
String s=sc.nextLine();
String ss[]=s.split(" ");
if(ss.length==1){
Shape circle=new Circle(Double.parseDouble(ss[0]));
System.out.printf("%.2f\n",circle.length());
}
if(ss.length==2){
Shape re=new Rectangle(Double.parseDouble(ss[0]),Double.parseDouble(ss[1]));
System.out.printf("%.2f\n",re.length());
}
if(ss.length==3){
Shape tr=new Triangle(Double.parseDouble(ss[0]),Double.parseDouble(ss[1]),Double.parseDouble(ss[2]));
System.out.printf("%.2f\n",tr.length());
}
}
}
}