java 第九次作业
一、题目:利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。
二、代码
/* 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 第九次作业的更多相关文章
- JAVA第九次作业
JAVA第九次作业 (一)学习总结 1.用思维导图对javaIO操作的学习内容进行总结. 参考资料: XMind. 2.下面的程序实现了文件的拷贝,但采用的是一个字节一个字节的读写方式,效率很低.使用 ...
- Java第九次作业--输入输出流和文件操作
Deadline: 2017-5-25 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握使用File类访问文件 掌握IO操作的基本原理 掌握字节流和字符流读写文件的操作 二.作业 ...
- java第九次作业:第九章例题3个
作业1: 例题9.1 制作圆类,根据圆的半径求出周长及面积 package com.swift; //抽象的方法构成类,把属性和方法进行封装 public class Circle { // 两个方面 ...
- Week09《java程序设计》第九次作业总结
Week09<java程序设计>第九次作业总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 答: 2. 书面作业 本次作业题集集合 1. Li ...
- 【西北师大-2108Java】第九次作业成绩汇总
[西北师大-2108Java]第九次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第11周学习指导及要求 实验目的与要求 (1)理解泛型概念: (2)掌握泛型类的定义与使用: (3)掌握泛型方 ...
- JAVA第二次作业展示与学习心得
JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...
- JAVA第十次作业
JAVA第十次作业 (一)学习总结 1.用思维导图对java多线程的学习内容进行总结. 参考资料: XMind. 2.下面是一个单线程实现的龟兔赛跑游戏. public class TortoiseH ...
- Java第二周作业
Java第二周作业 本周作业: 参考http://www.cnblogs.com/rocedu/p/7911138.html 学习第二三章视频 参考http://www.cnblogs.com/roc ...
- Java第一周作业
Java第一周作业 本周作业: 参考<<教材学习指导(http://www.cnblogs.com/rocedu/p/7911138.html)) 学习第一章视频 参考<<使用 ...
随机推荐
- Java开发笔记(一百四十一)JavaFX的列表与表格
下拉框只有在单击时才会弹出所有选项的下拉列表,这固然节省了有限的界面空间,但有时候又需要把所有选项都固定展示到窗口上.像这种平铺的列表控件,Swing给出的控件名称是ListBox,而JavaFX提供 ...
- 升级nginx1.12为1.161版本
升级nginx1.12为1.161版本 一.添加源 到 cd /etc/yum.repos.d/ 目录下 新建nginx.repo 文件 vim nginx.repo 输入以下信息 [nginx-st ...
- python学习-64 面向对象三大特性----继承1
面向对象三大特性 1.三大特性? 继承,多态,封装 2.什么是继承? 类的继承和现实生活中的父与子,继承关系是一样的,父类为基类. python中的类继承分为:单继承和多继承 3.举例说明 class ...
- day20——规范化目录
day20 为什么要有规范化目录 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目. 可维护性高: 定 ...
- 有关java中的try{}catch(){}的讲解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_38225558/article/d ...
- 如何将 Redis 用于微服务通信的事件存储
来源:Redislabs作者:Martin Forstner 翻译:Kevin (公众号:中间件小哥) 以我的经验,将某些应用拆分成更小的.松耦合的.可协同工作的独立逻辑业务服务会更易于构建和维护.这 ...
- Linux环境python3.6.5
安装python3.6可能使用的依赖 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel r ...
- UnityShader - 渲染管线
定义: 显卡内部处理图像信号的并行处理单元,也称为渲染流水线 发生位置: CPU和GPU 渲染机理: 将图像所具备的图形信息(顶点.纹理.材质.摄像机位置等)经过一系列阶段的处理,最终转换为屏幕上的图 ...
- .NET/C# 检测电脑上安装的 .NET Framework 的版本
原文:.NET/C# 检测电脑上安装的 .NET Framework 的版本 如果你希望知道某台计算机上安装了哪些版本的 .NET Framework,那么正好本文可以帮助你解决问题. 本文内容 如何 ...
- JS权威指南读书笔记(七)
第十七章 事件处理 1 客户端JS程序采用了异步事件驱动编程模型. 2 关于事件的重要定义 a 事件类型(event type) b 事件目标(event target) target ...