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

    题目:

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

    Shape.java

    1 package com;
    2 //接口
    3 public interface Shape {
    4     double getArea();
    5 
    6 }

    Rectangle.java

     1 package com;
     2 
     3 public class Rectangle implements Shape {
     4     double a;//矩形長
     5     double b;//矩形寬
     6 
     7     public Rectangle(double a, double b) {
     8         this.a = a;
     9         this.b = b;
    10     }
    11 
    12     @Override
    13     public double getArea() {
    14 
    15         return a * b;//返回面積
    16     }
    17 
    18 }

    Squera.java

    
    
     1 package com;
     2 
     3 public class Squera extends Rectangle {
     4     public Squera(double a) {//正方形的邊
     5         super(a, a);
     6 
     7     }
     8 
     9     public double getArea() {
    10         return a * a;
    11     }
    12 
    13 }
     
     1 package com;
     2 
     3 public class Triangle implements Shape {
     4 
     5     double a;//三角形三邊長
     6     double b;
     7     double c;
     8 
     9     public Triangle(double a, double b, double c) {
    10         this.a = a;
    11         this.b = b;
    12         this.c = c;
    13     }
    14 
    15     public double getArea() {
    16         double p = (a + b + c) / 2;
    17         return Math.sqrt(p * (p - a) * (p - b) * (p - c));//三角形面積
    18     }
    19 
    20 }

    Cricle.java

     1 package com;
     2 
     3 public class Cricle implements Shape {
     4 
     5     double r;//半径
     6     double PI = 3.14;
     7 
     8     public Cricle(double r) {
     9         this.r = r;
    10     }
    11 
    12     public double getArea() {
    13 
    14         return r * r * PI;//
    15     }
    16 
    17 }

    Trapezoid.java

     1 package com;
     2 
     3 public class Trapezoid implements Shape {
     4 
     5     double a;//梯形的两边及高
     6     double b;//
     7     double h;//
     8     public Trapezoid(double a,double b,double h) {
     9         this.a=a;
    10         this.b=b;
    11         this.h=h;
    12         // TODO Auto-generated constructor stub
    13     }
    14     public double getArea() {
    15         
    16         return (a+b)*h/2;//梯形面积
    17     }
    18 
    19 }

    Cone.java

    package com;
    
    public class Cone {
        Shape shape;//定義接口變量
        double h;//
    
        public Cone(Shape shape, double h) {
            this.shape = shape;
            this.h = h;
    
        }
    
        public double getV() {//球體積
            return shape.getArea() * h;
        }
    
        public void changeD() {//換底
            this.shape = shape;
        }
    }

    Factory.java

     1 package com;
     2 
     3 import java.util.Scanner;
     4 
     5 public class Factory {
     6 
     7     Shape getShape(char c) {
     8         Scanner reader = new Scanner(System.in);
     9         Shape shape = null;
    10         switch (c) {//根据字符判断形状
    11         case 'R':
    12             System.out.println("请输入矩形的长和宽
    ");
    13             shape = new Rectangle(reader.nextInt(), reader.nextDouble());
    14             break;
    15         case 'Z':
    16             System.out.println("请输入正方形的边长,柱体的高
    ");
    17             shape = new Squera(reader.nextDouble());
    18             break;
    19         case 'C':
    20             System.out.println("请输入圆的半径
    ");
    21             shape = new Cricle(reader.nextDouble());
    22             break;
    23         case 't':
    24             System.out.println("请输入三角形的三条边
    ");
    25             shape = new Triangle(reader.nextDouble(), reader.nextDouble(),
    26                     reader.nextDouble());
    27             break;
    28 
    29         case 'T':
    30             System.out.println("请输入梯形的上底下底和高
    ");
    31             shape = new Trapezoid(reader.nextDouble(), reader.nextDouble(),
    32                     reader.nextDouble());
    33             break;
    34 
    35         }
    36         return shape;//
    37     }
    38 }

    Test.java

     1 package com;
     2 
     3 import java.util.Scanner;
     4 
     5 public class Test {
     6     public static void main(String[] args) {
     7 
     8         Scanner reader = new Scanner(System.in);
     9         System.out.print("请输入你选择的形状:矩形R,正方形Z,三角形t,圆C,梯形T:
    ");
    10         char c = reader.next().charAt(0);
    11         Factory factory = new Factory();
    12         Cone cone = new Cone(factory.getShape(c), reader.nextDouble());//获取底面积,高
    13         System.out.print(cone.getV());
    14 
    15     }
    16 }
  • 相关阅读:
    leetcode 33. Search in Rotated Sorted Array
    leetcode 32. Longest Valid Parentheses
    leetcode 28. Implement strStr()
    leetcode 27. Remove Element
    leetcode 26. Remove Duplicates from Sorted Array
    leetcode 24. Swap Nodes in Pairs
    leetcode 22. Generate Parentheses
    树莓派的频率管理和热控制
    sql执行insert插入一条记录同时获取刚插入的id
    全程直播个人博客重构过程,采用springboot+dubbo+jpa技术栈。
  • 原文地址:https://www.cnblogs.com/hzcxwz/p/11617220.html
Copyright © 2011-2022 走看看