计算各种图形的周长(接口与多态)

来源:互联网 发布:linux下强制删除用户 编辑:程序博客网 时间:2024/06/04 18:45

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

12 34 5 62-2-2 -3

Example Output

6.2810.0015.0012.560.000.00

Hint

构造三角形时要判断给定的三边的长度是否能组成一个三角形,即符合两边之和大于第三边的规则;
计算圆周长时PI取3.14。

Author

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while(in.hasNext()){String str = in.nextLine();String[] strs = str.split(" ");double []a = new double [100];int i;for(i = 0; i < strs.length; i++)a[i] = Integer.parseInt(strs[i]);double x,y,z;if(i == 1){x = a[0];if(x <= 0) System.out.println("0.00");else{Circle c = new Circle(x);System.out.printf("%.2f\n",c.length());}}else if(i == 2){x = a[0];y = a[1];if(x <= 0) System.out.println("0.00");else{Rectangle r = new Rectangle(x,y);System.out.printf("%.2f\n",r.length());}}else if(i == 3){for(i = 0; i < 3; i++){for(int j = 0; j < i; j++){if(a[j] > a[j+1]){double t = a[j];a[j] = a[j+1];a[j+1] = t;}}}x = a[0];y = a[1];z = a[2];if(x + y > z ){if(x <= 0) System.out.println("0.00");else{Triangle T = new Triangle(x,y,z) ;System.out.printf("%.2f\n",T.length());}}elseSystem.out.println("0.00"); }}in.close();}}interface Shape{//public void shape();double length();}class Triangle implements Shape{double x1,y1,z1;Triangle(double x1, double y1 , double z1){this.x1 = x1;this.y1 = y1;this.z1 = z1;}public double length(){return x1 + y1 + z1;}}class Rectangle implements Shape{double x,y; Rectangle(double x, double y){this.x = x;this.y = y;}public double length(){return (x + y) * 2;}}class Circle implements Shape{double z;    Circle(double z){this.z = z;}public double length(){return 2 * 3.14 * z;}}

0 0
原创粉丝点击