Java开发实战经典(第2版)6.15 习题

定义类Shape , 用来表示一般二维图形 。 Shape 具有抽象方法 area 和 perimeter , 分别用来计算形状的面积和周长 。试定义一些二维形状类 ( 如矩形 、 三角形 、 圆形 、 椭圆形 等 ),这些类均为Shape类的子类 。
还能实现多组输入 输出 。

import java.util.Scanner;

abstract class Shape
{
    public abstract double area() ;
    public abstract double perimeter() ;
}
class rectangle extends Shape
{
    private double width ;
    private double height ;
    public rectangle ( double width , double height ){
        this.width = width ;
        this.height = height ;
    }
    public double area(){
        return width * height ;
    }
    public double perimeter(){
        return 2*( width + height ) ;
    }
}
class Triangle extends Shape
{
    private double a ;
    private double b ;
    private double c ;
    private double angle ;// 角度
    public void setSides( double a , double b , double c , double angle ){
        if( a >= b + c || b >= a + c || c >= a + b )
        {
            System.out.println( "三角形两边之和必须大于第三边" ) ;
            return ;
        }
        this.a = a ;
        this.b = b ;
        this.c = c ;
        this.angle = angle ;
    }
    public double area(){
        double x = Math.toRadians( angle ) ;
        return 0.5 * a * b * Math.sin( x ) ;  // 数学类计算sin
    }
    public double perimeter(){
        return a + b + c ;
    }
}
class Circle extends Shape
{
    private double radius ;
    public void setRadius( double radius )
    {
        this.radius = radius ;
    }
    public double area(){
        return Math.PI * radius * radius ;
    }
    public double perimeter(){
        return 2 * Math.PI * radius ;
    }
}
class ellipse extends Shape
{
    private double m ;
    private double n ;
    public void setEllipse( double m , double n ){
        this.m = m ;
        this.n = n ;
    }
    public double area(){
        return Math.PI * m * n ;
    }
    public double perimeter(){
        return 0 ;
    }
}
public class ShapeTest {
    public static void main (String[ ] args ) {
        Scanner scanner = new Scanner( System.in ) ;
        double a , b , c , d ;
        System.out.println( " 请输入你想要计算的图形: " );
        while( scanner.hasNext() ) {
            String s = scanner.nextLine() ;
            switch( s )
            {
                case "矩形" :
                {
                    System.out.print( " 请输入矩形的长和宽 : " );
                    a = scanner.nextDouble() ; b = scanner.nextDouble() ;
                    rectangle rt = new rectangle( a , b ) ;
                    System.out.println( "矩形的面积为 :" + rt.area() + "\n矩形的周长为 :" + rt.perimeter() );
                } break ;
                case "三角形" :
                {
                    System.out.print( " 请输入三角形的三条边长以及其中的一个角 : " );
                    a = scanner.nextDouble() ; b = scanner.nextDouble() ; c = scanner.nextDouble() ; d = scanner.nextDouble() ;
                    Triangle ta = new Triangle() ;
                    ta.setSides( a, b, c, d );
                    System.out.println( "三角形的面积为 : " + ta.area() + "\n三角形的周长为 : " + ta.perimeter() ) ;
                } break ;
                case "圆形" :
                {
                    System.out.print( " 请输入圆的半径  : " ) ;
                    a = scanner.nextDouble() ;
                    Circle cr = new Circle ( ) ;
                    cr.setRadius( a ) ;
                    System.out.println( "圆的面积为 : " + cr.area() + "\n圆的周长为 : " + cr.perimeter() );
                } break ;
                case "椭圆形" :
                {
                    System.out.print( " 请输入椭圆的半长轴和半短轴 : " );
                    a = scanner.nextDouble() ; b = scanner.nextDouble() ;
                    ellipse el = new ellipse ( ) ;
                    el.setEllipse( a , b ) ;
                    System.out.println( "椭圆的面积为 : " + el.area() + "\n椭圆的周长不可计算  " ) ;
                } break ;
                default :
                {
                    System.out.println( " 暂不支持该图形的计算 . " ) ;
                }
            }
            scanner.nextLine() ;
        }
    }
}

你可能感兴趣的:(Java开发实战经典(第2版)6.15 习题)