zoukankan      html  css  js  c++  java
  • 面向对象 (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;
        }
    }

    二、成功界面截图

  • 相关阅读:
    SQL Server 2017 左补齐
    Mac下面配置oh-my-ssh
    关于VSTS自动Build报错问题之Microsoft.Net.Compilers
    Angular5中提取公共组件之radio list
    Angular5中提取公共组件之checkbox list
    关于博客园开放API的授权问题解决
    记开发个人图书收藏清单小程序开发(十)DB开发——新增图书信息
    Keepalived + Nginx:负载均衡+高可用服务 --keepalived介绍及应用
    Nginx:综合架构负载均衡 -- nginx负载均衡企业实践应用
    Nginx:综合架构负载均衡 -- nginx负载均衡介绍部署及应用
  • 原文地址:https://www.cnblogs.com/wangxiangyue/p/11609235.html
Copyright © 2011-2022 走看看