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)) 学习第一章视频 参考<<使用 ...
随机推荐
- C++静态成员变量必须定义
静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存,否则不能使用,编译不会通过. class A { public: static int a; //声明但未 ...
- linux U盘 硬盘 unable to mount
转自aaa小菜鸡 出现原因: 上次文件没拷完就拔了U盘 参考: 解决Ubuntu挂载U盘失败的解决方法 Linux下无法挂载U盘 解决: 1.sudo fdisk -l列出当前系统下的文件设备 2.s ...
- kube-proxy运行机制分析【转载】
转自:http://blog.itpub.net/28624388/viewspace-2155433/ 1.Service在很多情况下只是一个概念,而真正将Service的作用实现的是kube-pr ...
- 开发板与pc之间文件传输:kermit and lrzsz
imx6开发板与pc机之间通过串口传输文件步骤: 1. 安装好kermit并可以使用 2. 交叉编译lrzsz开源软件并把可执行程序lrz lsz拷贝到开发板 2.1 下载并解压lrzsz-0.12. ...
- (四)linux 学习 --使用命令
The Linux Command Line 读书笔记 - 部分内容来自 http://billie66.github.io/TLCL/book/chap06.html 文章目录 什么是命令 是哪一种 ...
- 基于Snappy实现数据压缩和解压
Snappy是谷歌开源的一个用来压缩和解压的开发包.相较其他压缩算法速率有明显的优势,官方文档显示在64位 i7处理器上,每秒可达200~500MB的压缩速度,不禁感叹大厂的算法就是厉害. 开源项目地 ...
- 中国大学MOOC-翁恺-C语言程序设计习题集(一)
练习 02-0. 整数四则运算(10) 本题要求编写程序,计算2个正整数的和.差.积.商并输出.题目保证输入和输出全部在整型范围内. 输入格式: 输入在一行中给出2个正整数A和B. 输出格式: 在4行 ...
- logrus 剖析之 formatter
使用 logrus 通过 formatter 来定义输出日志的格式,具体例子如下: package main import ( log "github.com/Sirupsen/logrus ...
- Spring MVC前端控制器不拦截静态资源配置
- git clone一个仓库下的单个文件【记录】
注意:本方法会下载整个项目,但是,最后出现在本地项目文件下里只有需要的那个文件夹存在.类似先下载,再过滤. 有时候因为需要我们只想gitclone 下仓库的单个或多个文件夹,而不是全部的仓库内容,这样 ...