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

二、代码

/* 5个形状类分别调用Shape接口;

柱体类中,定义求体积方法,换底求体积方法;

工厂类中,通过输入对应形状的字符,创建对应形状类型的对象。矩形用 j表示,圆形用c表示,正方形用z表示,三角形用s表示,梯形用t表示。**/

形状类

package ccut;

public interface Shape {
double getArae();
}

5个形状

package ccut;
public class Zheng implements Shape { double bian;
public Zheng(double bian){
this.bian =bian; }
public double getArae() {
return bian*bian;
} }
package ccut;
import java.math.*;
public class Circle implements Shape {
double r;
public Circle(double r){
this.r=r;
}
public double getArae() {
return Math.PI*r*r;
} }
package ccut;
import java.math.*;
public class SanJiaoXing implements Shape { double a,b,c;
double p;
public SanJiaoXing(double a,double b,double c){
this.a=a;
this.b=b;
this.c=c;
}
public double getArae() {
p=(a+b+c)/2; return Math.sqrt(p*(p-a)*(p-b)*(p-c));
} }
package ccut;

public class TiXing implements Shape {
double a,b,h;
public TiXing(double a,double b,double h){
this.a=a;
this.b=b;
this.h=h;
}
public double getArae() { return (a+b)*h/2;
} }
package ccut;

public class Rect implements Shape {
double chang;
double kuan;
public Rect(double chang,double kuan){
this.chang =chang;
this.kuan =kuan;
}
public double getArae() {
return chang*kuan;
} }

工厂类

package ccut;
import ccut.Shape;
public class Factory {
Shape getShape(char c){
Shape shape=null;
switch(c){
case 'j':shape=new Rect(3,4);break;
case 'z':shape=new Zheng(5);break;
case 'c':shape=new Circle(4);break;
case 's':shape=new SanJiaoXing(5,5,6);break;
case 't':shape=new TiXing (2,3,4);break;
}
return shape;
} }

柱体类

package ccut;
import ccut.Shape;
public class ZhuTi {
double height;
Shape shape;
public ZhuTi(Shape shape,double height){
this.height=height;
this.shape=shape; }
void setShape(Shape shape){
this.shape=shape;
}
public double getV(){
return shape.getArae()*height;
}
}

主类

package ccut;
import ccut.ZhuTi;
import ccut.Factory;
import java.util.*;
public class Test {
public static void main(String[] args) { Scanner r =new Scanner(System.in);
System.out.println("请输入底的类型:");
char c=r.next().charAt(0);
Factory factory=new Factory();
factory.getShape(c);
ZhuTi zhuti=new ZhuTi(factory.getShape(c),5);
System.out.println("体积为:"+zhuti.getV());
System.out.println("请输入新的底的类型:");
c=r.next().charAt(0);
zhuti.setShape(factory.getShape(c));
System.out.println("体积为:"+zhuti.getV());
} }

三、运行结果

java 第九次作业的更多相关文章

  1. JAVA第九次作业

    JAVA第九次作业 (一)学习总结 1.用思维导图对javaIO操作的学习内容进行总结. 参考资料: XMind. 2.下面的程序实现了文件的拷贝,但采用的是一个字节一个字节的读写方式,效率很低.使用 ...

  2. Java第九次作业--输入输出流和文件操作

    Deadline: 2017-5-25 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握使用File类访问文件 掌握IO操作的基本原理 掌握字节流和字符流读写文件的操作 二.作业 ...

  3. java第九次作业:第九章例题3个

    作业1: 例题9.1 制作圆类,根据圆的半径求出周长及面积 package com.swift; //抽象的方法构成类,把属性和方法进行封装 public class Circle { // 两个方面 ...

  4. Week09《java程序设计》第九次作业总结

    Week09<java程序设计>第九次作业总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 答: 2. 书面作业 本次作业题集集合 1. Li ...

  5. 【西北师大-2108Java】第九次作业成绩汇总

    [西北师大-2108Java]第九次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第11周学习指导及要求 实验目的与要求 (1)理解泛型概念: (2)掌握泛型类的定义与使用: (3)掌握泛型方 ...

  6. JAVA第二次作业展示与学习心得

    JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...

  7. JAVA第十次作业

    JAVA第十次作业 (一)学习总结 1.用思维导图对java多线程的学习内容进行总结. 参考资料: XMind. 2.下面是一个单线程实现的龟兔赛跑游戏. public class TortoiseH ...

  8. Java第二周作业

    Java第二周作业 本周作业: 参考http://www.cnblogs.com/rocedu/p/7911138.html 学习第二三章视频 参考http://www.cnblogs.com/roc ...

  9. Java第一周作业

    Java第一周作业 本周作业: 参考<<教材学习指导(http://www.cnblogs.com/rocedu/p/7911138.html)) 学习第一章视频 参考<<使用 ...

随机推荐

  1. java的byte[]与String相互转换

    String转byte[] byte[] sInput = new byte[0]; try { // 可以指定编码,默认也只UTF-8 sInput = "这是内容".getBy ...

  2. 动态字节码技术Javassist

    字节码技术可以动态改变某个类的结构(添加/删除/修改  新的属性/方法) 关于字节码的框架有javassist,asm,bcel等 引入依赖 <dependency> <groupI ...

  3. web动静分离

    1 动态资源和静态资源 动态资源:多次访问页面,原代码会发生改变,比如jsp 静态资源:多次访问页面,原代码不发生改变,比如html,css 2 动静分离 将动态资源(jsp)放在tomcat服务器中 ...

  4. 重新安装Eclipse的一些配置

    工欲善其事,必先利其器.工具做好调整可以让我们事半功倍. 以下设置均在window-->preferences中 1.首先修改工作空间字符集为UTF-8 2.修改字体大小 3.修改Java代码提 ...

  5. scrapy服务化持久运行

    如果要将scrapy做成服务持久运行,通常我们会尝试下面的方式,这样是不可行的: class myspider(scrapy.Spider): q = queue()         #task qu ...

  6. SQL——BETWEEN操作符

    一.BETWEEN操作符的基本用法 BETWEEN操作符用于选取两个值范围内的值. 语法格式如下: SELECT 列名1,列名2... FROM 表名 WHERE 列名 BETWEEN 值1 AND ...

  7. go 学习笔记(3) 基础结构

    package main import ( "fmt" ) const NAME string = "imooc" var a string = "慕 ...

  8. 系统开启UAC情形下开机自启动程序如何以管理员权限启动

    系统开启UAC情形下开机自启动程序如何以管理员权限启动 题记:本文阐述的是在Windows系统开启UAC的情况下,开机自启动程序需要以管理员权限启动, 系统弹出UAC对话框,用户同意的情形下启动程序 ...

  9. 机器学习 降维算法: isomap & MDS

    最近在看论文的时候看到论文中使用isomap算法把3D的人脸project到一个2D的image上.提到降维,我的第一反应就是PCA,然而PCA是典型的线性降维,无法较好的对非线性结构降维.ISOMA ...

  10. PL/SQL不安装ORACLE客户端

    1.oracle官网下载instantclient,将包解压存放到本地. 在这个路径下D:\oracle-basic\instantclient_12_2\network\admin放入TNS文件. ...