zoukankan      html  css  js  c++  java
  • 第9次作业--接口及接口回调

    题目:

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

    一, 长方形代码(包含在yyy包内,使用接口,两个成员变量 一个求面积方法)

    package yyy;
    public class cfx implements Shape{
    double a; //a是长
    double b; //b是宽
    public cfx( double a,double b){
    this.a=a;
    this.b=b;
    }
    public double getArea(){
    return a*b;

    }
    }

    二,正方形代码 (包含在yyy包内,继承cfx类, 一个求面积方法)
    package yyy;
    public class zheng extends cfx {

    public zheng(double c) {
    	super(c, c);           //正方形边长
    	
    }
    public double getArea(){
    	return a*a ;
    	
    }
    

    }

    三,三角形代码(包含在yyy包内,使用接口,三个成员变量 一个求面积方法)
    
    package yyy;
    

    public class sanjiao implements Shape {
    double a;
    double b;
    double c;
    public sanjiao(double a,double b,double c){
    this.a=a;
    this.b=b;
    this.c=c;
    }
    public double getArea(){
    double p=(a+b+c)/2;
    return Math.sqrt(p(p-a)(p-b)*(p-c));
    }
    }

    四,梯形代码(包含在yyy包内,使用接口,三个成员变量 一个求面积方法)
    package yyy;
    public class tixing implements Shape {
    double a;
    double b;
    double height;
    public tixing(double a,double b,double height){
    this.a=a;
    this.b=b;
    this.height=height;
    }
    public double getArea(){
    return (a+b)*height/2;
    }
    }

    五,圆形代码(包含在yyy包内,使用接口,一个成员变量 一个求面积方法)

    package yyy;
    

    public class yuan implements Shape {
    double radius;
    double PI=3.14;
    public yuan(double radius){
    this.radius=radius;
    }
    public double getArea(){

        return PI*radius*radius;
    }
    

    }

    六,接口

    package yyy;
    public interface Shape {
    double getArea();
    }

    七,工厂(使用switch判别图形进行相应的求面积算法)

    package yyy;
    import java.util.Scanner;

    public class Factory {

    static Shape getShape(char c) {
            Scanner reader = new Scanner(System.in);
            Shape shape = null;
            switch (c) {
            case 'j':
                System.out.print("请输入矩形的长和宽
    柱体的高
    ");
                shape = new cfx(reader.nextDouble(), reader.nextDouble());
                break;
            case 's':
                System.out.print("请输入三角形的三条边,
    柱体的高
    ");
                shape = new sanjiao(reader.nextDouble(), reader.nextDouble(), reader.nextDouble());
                break;
            case 'y':
                System.out.print("请输入圆的半径,
    柱体的高
    ");
                shape = new yuan(reader.nextDouble());
                break;
            case 't':
                System.out.print("请输入梯形的上底下底
    和高
     柱体高
    z");
                shape = new tixing(reader.nextDouble(), reader.nextDouble(), reader.nextDouble());
                break;
            case 'z':
                System.out.print("请输入正方形的边长,
    柱体的高
    ");
                shape = new zheng(reader.nextDouble());
                break;
            }
            return shape;
    }
    

    }
    八,Text

     package yyy;
    

    import java.util.Scanner;

    public class Test {
    public static void main(String[] args) {
    while(true){
    Scanner reader = new Scanner(System.in);
    System.out.print("请输入你选择的形状:矩形j,三角形s,圆y,梯形t,正方形z");
    char c = reader.next().charAt(0);

            Cone cone = new Cone(Factory.getShape(c), reader.nextDouble());
            System.out.print(cone.getVolume());
        }
    }
    

    }

    package yyy;

    public class Cone {
    Shape shape;
    double high;

    public Cone(Shape shape, double high) {
        this.shape = shape;
        this.high = high;
    }
    public double getVolume() {
        return shape.getArea()*high;
    }
    

    }

    十,结果

  • 相关阅读:
    Eagle+微力同步实现素材资源协同共享
    Eagle+欧奥PicHome创建私有的pinterest网站
    C# 从Json中获取byte[] 二进制数据
    Vivado SDK 2016.4改JTAG速度
    启动jmeter,提示:unable to access jarfile apacheJmeter.jar
    直播来啦!亮相微软平台,聊聊Dapr的落地应用
    互斥锁、自旋锁、读写锁...理清它们的区别和应用
    行云创新:云原生技术助力企业数字化转型
    行云创新亮相“OSCAR开源产业大会”:云调试加速应用创新
    Actor模型是如何让编写并发系统变得更简单的?
  • 原文地址:https://www.cnblogs.com/12yy/p/11641306.html
Copyright © 2011-2022 走看看