JAVA第九次作业

题目:

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

代码:

aa.java

 1 package aaa;
 2 
 3 public class aa implements dd {           // 接口
 4     double r;
 5 
 6     public aa(double r) {                   
 7         this.r = r;
 8     }
 9 
10     @Override
11     public double getArea() {                  
12         return Math.PI * r * r;
13 
14     }
15 
16 }

bb.java

 1 package aaa;
 2 
 3 import java.util.Scanner;
 4 
 5 public class bb { //
 6 
 7     dd getShape(char c) { 
 8 
 9         dd shape = null;
10         switch (c) {
11         case 's': // 三角形
12             System.out.println("请输入三角形的三边长:");
13             Scanner reader = new Scanner(System.in);
14             double a1 = reader.nextDouble();
15             double a2 = reader.nextDouble();
16             double a3 = reader.nextDouble();
17             shape = new hh(a1, a2, a3);
18             System.out.println("以三角形为底的柱体体积为:");
19             break;
20         case 'j': // 矩形
21             System.out.println("请输入矩形的长和宽:");
22             Scanner reader1 = new Scanner(System.in);
23             double a4 = reader1.nextDouble();
24             double a5 = reader1.nextDouble();
25             shape = new cc(a4, a5);
26             System.out.println("以矩形为底的柱体体积为:");
27             break;
28 
29         case 'z': // 正方形
30             System.out.println("请输入正方形的边长:");
31             Scanner reader3 = new Scanner(System.in);
32             double a6 = reader3.nextDouble();
33             shape = new ee(a6);
34             System.out.println("以正方形为底的柱体体积为:");
35             break;
36         case 't': // 梯形
37             System.out.println("请输入梯形的上底下底和高:");
38             Scanner reader4 = new Scanner(System.in);
39             double b1 = reader4.nextDouble();
40             double b2 = reader4.nextDouble();
41             double b3 = reader4.nextDouble();
42             shape = new gg(b1, b2, b3);
43             System.out.println("以梯形为底的柱体体积为:");
44             break;
45         case 'y': //
46             System.out.println("请输入圆的半径:");
47             Scanner reader5 = new Scanner(System.in);
48             double b4 = reader5.nextDouble();
49             shape = new aa(b4);
50             System.out.println("以圆为底的柱体的体积为:");
51             break;
52         }
53         return shape;
54 
55     }
56 }

cc.java

 1 package aaa;
 2 
 3 public class cc implements dd {     //矩形类使用Shape接口
 4     double length;                           
 5     double width;
 6 
 7     public cc(double length, double width) {  
 8         this.length = length;
 9         this.width = width;
10     }
11 
12     public double getArea() {                        
13         return length * width;
14     }
15 }

dd.java

1 package aaa;
2 
3 public interface dd {       
4     double getArea();       
5 
6 }

ee.java

1 package aaa;
2 
3 public class ee extends cc {   
4 
5     public ee(double side) {         
6         super(side, side);
7     }
8 
9 }

ff.java

 1 package aaa;
 2 
 3 import java.util.Scanner;
 4 
 5 public class ff {
 6 
 7     public static void main(String[] args) {
 8 
 9         System.out.println("选择柱体以什么为底:");
10         System.out.println("z:正方形  
s:三角形 
t:梯形
y:圆 
j:矩形
   ");
11         Scanner sc = new Scanner(System.in);
12         char c = sc.next().charAt(0);
13         System.out.println("输入柱体的高:");
14         double d = sc.nextDouble();
15         bb factory = new bb();
16         dd shape = factory.getShape(c); // 求底
17 
18         System.out.println(ii.getVolume(shape.getArea(), d));
19     }
20 
21 }

gg.java

 1 package aaa;
 2 
 3 public class gg implements dd {                   
 4     double top;                                               
 5     double under;
 6     double h;
 7     public gg(double top,double under,double h){    
 8         this.top=top;
 9         this.under=under;
10         this.h=h;
11     }
12     @Override
13     public double getArea() {                           
14         
15         return (top+under)*h/2;
16     }
17 
18 }

hh.java

 1 package aaa;
 2 
 3 public class hh implements dd {       
 4     double a;                                  
 5     double b;
 6     double c;
 7     public hh(double a,double b,double c){    
 8         this.a=a;
 9         this.b=b;
10         this.c=c;
11     }
12     @Override
13     public double getArea() {                    
14         double p=(a+b+c)/2;
15         return Math.sqrt(p*(p-a)*(p-b)*(p-c));
16         
17     }
18 
19 }

ii.java

 1 package aaa;
 2 
 3 public class ii implements dd {                   
 4     double height; //定义height变量表示矩形的高,定义shape对象来表示具体的底面图形
 5     dd shape;
 6     
 7     public ii(dd shape,double height){
 8         this.shape=shape;
 9         this.height=height;
10     }
11     @Override
12     public double getArea() {                      
13 
14         return 0;
15     }
16 
17     public static double getVolume(double area, double height) {   
18         return area * height;
19     }
20     
21 
22 }

运行结果:

原文地址:https://www.cnblogs.com/lietian12345/p/11639835.html