• 第9次作业--接口及接口回调


    题目:

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

    代码:

    1、主类——Test:一个方法,两个对象

    /**
     * 调用Scanner方法
    *在主函数中使用while语句控制图形的选择和计算结果的输出、
    *定义了两个对象:Foctory类的对象——fo,Cone类的对象——cone
    *并给cone对象初始化
     */
    package cn.deu.ccut.nine;
    import java.util.Scanner;
    public class Test {
    
        public static void main(String[] args) {
        
            while(true){
                Scanner reader = new Scanner(System.in);
    
                System.out.println("请输入你选择的形状:矩形j,三角形s,圆y,梯形T,正方形Z");
                char c = reader.next().charAt(0);
                
                Foctory fo = new Foctory();
                
                Cone cone = new Cone(fo.getShape(c), fo.higt);
                
                System.out.println("该柱体的体积为:"+cone.getVolume());
                System.out.println("是否继续计算,是按1,否按任意键");
                if(1!=reader.nextDouble()) {
                    System.out.println("结束");
                    break;
                }
            }
    
        }
    
    }

    2、接口——Shape:

    /**
     * 创建形状接口 Shape
     */
    package cn.deu.ccut.nine;
    
    public interface Shape {
        //Shape higt = null;
    
        double getArea();
    }

    3、工厂类——Foctory类:一个方法、一个switch语句

    /**
     * 定义一个工厂类——Foctory类
     * 定义一个Shape接口的对象——shape
     * 使用switch语句,将计算结果赋给shape对象
     */
    package cn.deu.ccut.nine;
    import java.util.Scanner;
    
        import java.util.*;
        public class Foctory {
            public static double higt;
            static Scanner reader = new Scanner(System.in);
            static Shape shape=null;
            public static Shape getShape(char c){
                
                switch(c){
                case 'z':
                    System.out.println("请输入正方形的边长:"); 
                    double width=reader.nextDouble();
                    shape=new Square(width);
                    System.out.println("请输入以正方形为底的柱体高:");
                    higt=reader.nextDouble();
                    break;
                case 's':
                    System.out.println("请输入三角形的三边长");
                    double x=reader.nextDouble();
                    double y=reader.nextDouble();
                    double z=reader.nextDouble();
                    shape=new Triangle(x,y,z);
                    System.out.println("请输入以三角形为底的柱体高:"); 
                    higt=reader.nextDouble();
                    break;
                case 'j':
                    System.out.println("请输入矩形的长和宽");
                    double kuan=reader.nextDouble();
                    double chang=reader.nextDouble();
                    shape=new Rectangle(kuan,chang);
                    System.out.println("请输入以矩形为底的柱体高:");
                    higt=reader.nextDouble();
                    break;
                case 'y':
                    System.out.println("请输入圆的半径");
                    double r=reader.nextDouble();
                    shape=new Circle(r);
                    System.out.println("请输入以圆形为底的柱体高:"); 
                    higt=reader.nextDouble();
                    break;
                case 't':
                    System.out.println("请输入梯形的上底、下底、高");
                    double sd=reader.nextDouble();
                    double xd=reader.nextDouble();
                    double tg=reader.nextDouble();
                    shape=new Trapezoid(sd,xd,tg);
                    System.out.println("请输入以梯形为底的柱体高:"); 
                    higt=reader.nextDouble();
                    break;
                }
                return shape;
            }
         
        }

    4、柱体类——Cone:一个成员变量、一个对象变量、两个方法

    /**
     * 定义一个柱体类——Cone类
     * 定义一个成员变量high,一个shape对象变量
     * 定义一个构造方法计算柱体体积
     * 定义一个修改器修改对象值
     */
    package cn.deu.ccut.nine;
    
        public class Cone {
            Shape shape;
            double high;
            public Cone(Shape shape,double high){
            this.shape = shape;
            this.high = high;
        }
            public void setRect(Shape shape){
            this.shape = shape;
            }
        public double getVolume(){
            return shape.getArea() * high;
         
        }
        
        }

    5、矩形类——Rectangle类:两个成员变量、两个方法

    /**
     * 定义了一个矩形类——Rectangle类,该类调用了Shape接口
     * 定义了两个成员变量:宽——width、长——length
     * 定义了两个方法:构造方法(为width、length赋值)、getArea(计算矩形的面积)
     */
    package cn.deu.ccut.nine;
    
    public  class Rectangle implements Shape{
        double width;
        double length;
        public Rectangle (double width,double length) {
            this.width=width;
            this.length=length;
        }
        
        public double getArea() {
            
            return width*length;
        }
     }

    6、正方形子类——Square子类:一个构造方法、一个向上造型

    /**
     * 定义了一个正方形类——Square,该类继承了Rectangle类
     * 定义了一个构造方法,方法体内执行向上造型操作
     */
    package cn.deu.ccut.nine;
    
    public class Square extends Rectangle{
    
        public Square(double width) {
            super(width, width);
            
        }
    
    }

    7、三角形类——Triangle类:三个成员变量、两个方法

    /**
     * 定义了一个三角形类——Triangle类,该类调用了Shape接口
     * 定义了三个成员变量分别为三角行的三边:x、y、z
     * 定义了两个方法:构造方法(分别为三个边赋值)、getArea(计算三角形的面积)
     */
    package cn.deu.ccut.nine;
    
    public class Triangle implements Shape{
    
        double x;
        double y;
        double z;
        public Triangle(double x,double y,double z) {
            this.x=x;
            this.y=y;
            this.z=z;
        }
        public double getArea() {
            double p=(x+y+z)/2.0;
            return Math.sqrt(p*(p-x)*(p-y)*(p-z));
        }
    
    }

    8、圆类——Circle类:两个成员变量、两个方法

    /**
     * 定义了一个计算圆面积的类——Circle类
     * Circle类调用了Shape接口
     * 两个个成员变量:Π——pai、半径——r
     * 两个方法:构造方法(为半径r赋值)、getArea(计算圆的面积)
     */
    package cn.deu.ccut.nine;
    
    public class Circle implements Shape{
        double pai=3.14;
        double r;
        public Circle(double r){
            this.r=r;
        }
        public double getArea() {
            
            return pai*r*r;
        }
    
    }

    9、梯形类——Trapezoid类:三个成员变量、两个方法

    /**
     * 定义了计算梯形面积的类——Trapezoid类,该类调用了Shape接口
     * 定义了三个成员变量:上底——up、下底——down、高——high
     * 定义了两个方法:构造方法(为up、down、high、赋值)、getArea(计算梯形的面积)
     */
    package cn.deu.ccut.nine;
    
    public class Trapezoid implements Shape{
    
        double up;
        double down;
        double high;
        public Trapezoid(double up,double down,double high) {
            this.down=down;
            this.high=high;
            this.up=up;
        }
        public double getArea() {
            
            return (up+down)*high/2.0;
        }
    
    }

    运行截图:

  • 相关阅读:
    Codeforces Round #333 (Div. 2) B. Approximating a Constant Range st 二分
    Codeforces Round #333 (Div. 2) A. Two Bases 水题
    SPOJ 1557. Can you answer these queries II 线段树
    线段树 模板
    Codeforces Round #115 B. Plane of Tanks: Pro 水题
    Codeforces Round #115 A. Robot Bicorn Attack 暴力
    Codeforces Beta Round #51 C. Pie or die 博弈论找规律 有趣的题~
    Codeforces Beta Round #51 B. Smallest number dfs
    Codeforces Beta Round #51 A. Flea travel 水题
    Codeforces Beta Round #51 D. Beautiful numbers 数位dp
  • 原文地址:https://www.cnblogs.com/sunshuaiqun/p/11616136.html
Copyright © 2020-2023  润新知