1. 程式人生 > >計算各種圖形的周長(介面與多型)

計算各種圖形的周長(介面與多型)

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

1
2 3
4 5 6
2
-2
-2 -3

Example Output

6.28
10.00
15.00
12.56
0.00
0.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());
				}
			}
			else
					System.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;
	}
}