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

二、代码

/* 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. Maven中解决jar包冲突的三种方式

    首先我们在idea中创建一个maven工程,我们只关注pom.xml以及External Libraries中导入的jar包 导入spring-beans.jar <dependency> ...

  2. Docker部署ELK 7.0.1集群之Kibana安装介绍

    1.下载镜像 [root@vanje-dev01 ~]# docker pull kibana: 2.安装部署 2.1 创建宿主机映射目录 [root@vanje-dev01 ~]# mkdir /e ...

  3. 顺序表习题(1)-打印非递减数组a与b的升序并集(去除重复元素)

    void Print_Union(SqList a,SqList b) { , q = ; //初始化指针 ; //记录上一次打印的元素 while (p!=a.length&&q!= ...

  4. 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn

    https://www.cnblogs.com/31415926535x/p/11001669.html 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn ...

  5. Python使用RMF聚类分析客户价值

    投资机构或电商企业等积累的客户交易数据繁杂.需要根据用户的以往消费记录分析出不同用户群体的特征与价值,再针对不同群体提供不同的营销策略. 用户分析指标 根据美国数据库营销研究所Arthur Hughe ...

  6. Appium移动端自动化测试--使用IDE编辑并强化脚本

    目录 Appium客户端安装 安装Python IDE-Pycharm Java IDE 安装 使用隐式等待让用例更稳定 隐式等待 启动Appium非GUI模式:Appium Server 安装Pyt ...

  7. JAVA MyBybatis分页

    java: import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; impo ...

  8. AD域控服务器更改IP地址步骤

    1.cmd命令行,先停止netlogon服务:net stop netlogon 2.修改本机的IP地址 3.清楚IP缓存:ipconfig /flushdns 4.重启netlogon服务:net ...

  9. Js保存图片到本地

    注:此方法是使用hbuilderx云打包之后才能用,否则在浏览器中会报 plus is not defined 官方文档 http://www.html5plus.org/doc/zh_cn/gall ...

  10. Linux 基础学习1

    目录 Linux 基础学习 用户登录 终端 交互式接口 bash 修改ssh连接慢的步骤 命令提示符 显示提示符格式 命令 别名 命令格式 获取命令的帮助信息 man bash 快捷键 tab 键 引 ...