计算各种图形的周长(接口与多态)
Time Limit: 1000MS
Memory Limit: 65536KB
Submit Statistic
Problem Description
定义接口Shape,定义求周长的方法length()。
定义如下类实现接口Shape的抽象方法:
(1)三角形类Triangle (2)长方形类Rectangle (3)圆形类Circle等。
定义测试类ShapeTest,用Shape接口定义变量shape,用其指向不同类形的对象,输出各种图形的周长。并为其他的Shape接口实现类提供良好的扩展性。
Input
输入多组数值型数据(double);
一行中若有1个数,表示圆的半径;
一行中若有2个数(中间用空格间隔),表示长方形的长度、宽度。
一行中若有3个数(中间用空格间隔),表示三角形的三边的长度。
若输入数据中有负数,则不表示任何图形,周长为0。
Output
行数与输入相对应,数值为根据每行输入数据求得的图形的周长(保留2位小数)。
Example Input
Example Output
6.28
10.00
15.00
12.56
0.00
0.00
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner (System.in);
DecimalFormat m = new DecimalFormat("0.00");
while( in.hasNext() ){
String str = in.nextLine();
String []s = str.split(" ");
int k = s.length;
int []a = new int [k];
int i, j, x;
for( i=0; ia[j] ){
x = a[i];
a[i] = a[j];
a[j] = x;
}
if( a[0]<0 )
System.out.println("0.00");
else{
if ( k==1 ){
Circle c = new Circle(a[0]);
System.out.println(m.format(c.length()));
}
else if ( k==2 ){
Rectangle r = new Rectangle (a[0], a[1]);
System.out.println(m.format(r.length()));
}
else if ( k==3 ){
Triangle t = new Triangle(a[0], a[1], a[2]);
if( t.isTriangle() )
System.out.println(m.format(t.length()));
else
System.out.println("0.00");
}
}
}
in.close();
}
}
interface Shape{
double length();
}
class Triangle implements Shape{
double x, y, z;
Triangle ( double x, double y, double z ){
this.x = x;
this.y = y;
this.z = z;
}
public double length(){
return x+y+z;
}
public boolean isTriangle(){
boolean f = false;
if( x+y>z && x+z>y && y+z>x )
f = true;
return f;
}
}
class Rectangle implements Shape {
double x, y;
Rectangle ( double x, double y ){
this.x = x;
this.y = y;
}
public double length(){
return 2*(x+y);
}
}
class Circle implements Shape{
double r;
Circle ( double r ){
this.r = r;
}
public double length (){
return 2*r*3.14;
}
}
Hint
构造三角形时要判断给定的三边的长度是否能组成一个三角形,即符合两边之和大于第三边的规则;
计算圆周长时PI取3.14。