• 面向对象 (5)计算柱体体积可换底


    题目:利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。

    一、源程序

    1、Test.java

    /**计算棱柱体积可换底
     * 9个类
     */
    package w29;
    
    import java.util.Scanner;
    
    public class Test {
        
        public static void main(String[] args) {
            while(true){
                Scanner reader = new Scanner(System.in);
                System.out.println("请输入柱体底的形状:r(矩形);s(正方形);t(梯形);T(三角形);c(圆形)。");
                char c = reader.next().charAt(0);
                Factory factory = new Factory();
                Shape shape;
                Column column = new Column(factory.getShape(c),reader.nextDouble());
                System.out.println("柱体的体积"+column.getVolume());
            }
        }
    }

    2、Factory.java

    package w29;
    //工厂类
    import java.util.Scanner;
    
    public class Factory {
        protected Shape getShape(char c){
            Scanner reader = new Scanner(System.in);
            Shape shape = null;
            switch(c){
            case 'r':System.out.println("请输入矩形底的长和宽、柱体的高");shape = new Rectangle(reader.nextDouble(),reader.nextDouble());break;
            case 's':System.out.println("请输入正方形底的边、柱体的高");shape = new Square(reader.nextDouble());break;
            case 't':System.out.println("请输入梯形底的上下底和高、柱体的高");shape = new trapezium(reader.nextDouble(),reader.nextDouble(),reader.nextDouble());break;
            case 'T':System.out.println("请输入三角形底的三边、柱体的高");shape = new Triangle(reader.nextDouble(),reader.nextDouble(),reader.nextDouble());break;
            case 'c':System.out.println("请输入圆形底的半径、柱体的高");shape = new Circle(reader.nextDouble());break;
            }
            return shape;
        }
    }

    3、Shape.java

    package w29;
    //形状接口
    public interface Shape {
        double getArea();
    }

    4、Rectangle.java

    package w29;
    //矩形类
    public class Rectangle implements Shape {
        double width,length;
        public Rectangle(double width,double length){
            this.width = width;
            this.length = length;
        }
        public double getArea() {
            return width*length;
        }
    }

    5、Square.java

    package w29;
    //正方形类
    public class Square extends Rectangle {
    
        public Square(double side) {
            super(side, side);
        }
        public double getArea() {
            return width*length;
        }
    }

    6、trapezium.java

    package w29;
    //梯形类
    public class trapezium extends Rectangle {
        double height;
        public trapezium(double up, double down, double height) {
            super(up, down);
            this.height = height;
        }
        public double getArea() {
            return (width+length)*height/2;
        }
    }

    7、Triangle.java

    package w29;
    //三角形类
    public class Triangle implements Shape {
        double a,b,c;
        public Triangle(double a, double b, double c) {
            super();
            this.a = a;
            this.b = b;
            this.c = c;
        }
        public double getArea() {
            double sum = (a+b+c)/2;
            return Math.sqrt(sum*(sum-a)*(sum-b)*(sum-c));
        }
    }

    8、Circle.java

    package w29;
    //圆形类
    public class Circle implements Shape {
        double radius;
        public Circle(double radius) {
            super();
            this.radius = radius;
        }
        public double getArea() {
            // TODO Auto-generated method stub
            return radius*radius*3.14;
        }
    }

    9、Column.java

    package w29;
    //柱体类
    public class Column {
        Shape shape;
        double high;
        public Column(Shape shape, double high) {
            super();
            this.shape = shape;
            this.high = high;
        }
        public double getVolume(){
            return shape.getArea()*high;
        }
    }

    二、成功界面截图

  • 相关阅读:
    解决UITableView中Cell重用机制导致内容出错的方法总结
    Hdu 1052 Tian Ji -- The Horse Racing
    Hdu 1009 FatMouse' Trade
    hdu 2037 今年暑假不AC
    hdu 1559 最大子矩阵
    hdu 1004 Let the Balloon Rise
    Hdu 1214 圆桌会议
    Hdu 1081 To The Max
    Hdu 2845 Beans
    Hdu 2955 Robberies 0/1背包
  • 原文地址:https://www.cnblogs.com/wangxiangyue/p/11609235.html
Copyright © 2020-2023  润新知