实验2——基于对象的程序设计实验报告.doc

上传人:仙人指路1688 文档编号:3804248 上传时间:2023-03-22 格式:DOC 页数:13 大小:132.50KB
返回 下载 相关 举报
实验2——基于对象的程序设计实验报告.doc_第1页
第1页 / 共13页
实验2——基于对象的程序设计实验报告.doc_第2页
第2页 / 共13页
实验2——基于对象的程序设计实验报告.doc_第3页
第3页 / 共13页
实验2——基于对象的程序设计实验报告.doc_第4页
第4页 / 共13页
实验2——基于对象的程序设计实验报告.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《实验2——基于对象的程序设计实验报告.doc》由会员分享,可在线阅读,更多相关《实验2——基于对象的程序设计实验报告.doc(13页珍藏版)》请在三一办公上搜索。

1、实验2基于对象的程序设计实验报告开课实验室:社会科学仿真实验室 2012年4月18日学院商学院年级、专业、班10电子商务班姓名冯文婷成绩课程名称Java语言程序设计实验项目名称基于对象的程序设计指导老师签名1. 实验目的(1) 掌握基于对象的程序设计基本概念;(2) 掌握把对象的外部表现与内部实现机制分离的机制;(3) 掌握通过组合对象的相互作用构成大型系统的基本技术;(4) 掌握多个文件java程序设计的方法;2. 实验内容和步骤 精读Calc.ppt 中的Pocket Calculator Simulator,并上机调试运行该程序,在此基础上,修改该程序,使其具备错误处理能力。具体要求如下

2、:(1) In CalcEng 类l 增加一个常量MAX_VALUE,其值为当前充许的最大精度(目前设置为8个数字);l 增加一个private 数据成员 String statusFlag,用于保存engine的状态。例如“E”代表错误,“ ”代表正常. 这些串设成符号常量。l 增加一个public String status() 方法,用于返回statusFlag;l 增加一个public boolean isError(),如果engine处理出错状态,则返回true.l 增加一个private boolean isError(double n),用于返回计算结果是否太大;l 修改ope

3、rate方法,使其clear,all_clear均能处理statusFlag.(2) In CalcFace类l 增加一个public void showStatus(String e),用于修改提示信息. 例如正常时显示“Calc”,若处理出错状态时显示“CalcE”.l 增加一个 public void errorInput(String str),用于实现CalcFace对象在error input mode和normal input mode 之间切换:当处于error input mode 时,系统除了提示规定的字符外不接受任何其它输入(可在CalcFace类中定义一个String型

4、的引用变量errString,用于记录提示信息; 通过定义一个boolean型的数据成员 errorMode,记录输入模式:true 为error mode, false 为normal mode)。l 修改enter方法,使其能处理error mode 和normal mode.(3) In Calculator类l 修改Calculator类,使用能够观察engine的状态,并可使其在error和normal mode之间切换。(4) 调试并运行修改后的Pocket Calculator Simulator,要求能显示error mode 和normal mode.三、实验原始记录(数据、

5、图表、计算等)增加一个常量MAX_VALUE,其值为当前充许的最大精度(目前设置为8个数字)private final double MAX_VALUE=99999999; 增加一个private 数据成员 String statusFlag,用于保存engine的状态。例如“E”代表错误,“ ”代表正常. 这些串设成符号常量。private String statusFlag; 增加一个public String status() 方法,用于返回statusFlag;public boolean isError() if(this.statusFlag.equals(E)/判断引擎是否出错

6、return true; else return false; 增加一个private boolean isError(double n),用于返回计算结果是否太大;/用于返回计算结果是否太大;private boolean isError(double n)if(nMAX_VALUE) statusFlag=E;return true;if( n=MAX_VALUE)statusFlag= ;return false; 修改operate方法,使其clear,all_clear均能处理statusFlag;public void operate(char nc) / nc is next o

7、pcodeswitch (nc) case A:allClear();statusFlag= ;return; / All Clearcase C:clear();statusFlag= ;return; / Clearcase N: / sign changeif (argcnt = 1)ans = -ans;elsearg = -arg;return;default: / +-*/=compute();op = nc; / new opcode(2)In CalcFace类 增加一个public void showStatus(String e),用于修改提示信息. 例如正常时显示“Cal

8、c”,若处理出错状态时显示“CalcE”;/用于修改提示信息. 正常时显示“Calc”,若处理出错状态时显示“CalcE”.public void showStatus(String e)if(e=E)System.out.println(CalcE:);if(e= )System.out.println(Calc:); 增加一个 public void errorInput(String str),用于实现CalcFace对象在error input mode和normal input mode 之间切换:当处于error input mode 时,系统除了提示规定的字符外不接受任何其它输入

9、(可在CalcFace类中定义一个String型的引用变量errString,用于记录提示信息; 通过定义一个boolean型的数据成员 errorMode,记录输入模式:true 为error mode, false 为normal mode);/param:str为系统规定输入的字符串public void errorInput(String str)if(errorMode=true)errString=error input mode:请输入规定的字符+str;System.out.println(errString);errorMode=false;elseerrString=nor

10、mal input mode;System.out.println(errString);errorMode=true;修改enter方法,使其能处理error mode 和normal mode;/ 对input()中接收的字符进行检查private void enter(char c) if (keys.indexOf(c) != -1) /indexOf()方法用于检查/keys中是否包含c,即看是否输入了计算器支持的运算符 showOp(c); / 是运算符errorInput(keys);/显示当前的input mode,并却换if (num) / 如果此运算符之前是数字则 calc

11、.enterNumber(extractNumber(), c); /调用提取数字的方法extractNumber else / 如果此运算符之前无数字 calc.enterOp(c);showStatus(calc.showEngin();/显示引擎状态reset(); else if (nump(c) & nbuf.length() MAX_VALUE | n-MAX_VALUE)statusFlag=E;return true;elsestatusFlag=;return false;/ CalcFace.java /import java.io.*;/仿真计算器的面板类/负责接收用户输

12、入,检查接收的输入是否合法class CalcFace / 构造函数public CalcFace(String k, byte pr) keys = k; / k中记录了计算器所支持的运算符prec = pr+; / 记录了计算器支持的计算精度/为什么要+;nbuf = new StringBuffer(prec); / 存储用户输入的数据(操作数,运算符)reset();/ 把计算器Calculator 对象赋值给CalcFace中的calc成员,以方便使用public void setCalc(Calculator ca) calc = ca;/ 显示数据,格式为 提示符+ 数据publ

13、ic void showNumber(String s) System.out.println(prompt + s);/ 显示运算符,暂无内容public void showOp(char op) /自己加System.out.println(+op);/ 循环接收用户输入,数用户按 Ctrl-z时结束public void input() throws IOException int i;while (i = inchar() != -1) / 按Ctrl-z时返回-1enter(char) i);/ 对input()中接收的字符进行检查private void enter(char c)

14、 if (keys.indexOf(c) != -1) / indexOf() 方法用于检查keys中是否包含c/ ,即看是否输入了计算器支持的运算符showOp(c); / 是运算符if (num) / 如果此运算符之前是数字则calc.enterNumber(extractNumber(), c); / 调用提取数字的方法extractNumberelse/ 如果此运算符之前无数字calc.enterOp(c);reset(); else if (nump(c) & nbuf.length() prec) num = true;buildNumber(c);/ 用于判断c是否数数字priv

15、ate boolean nump(char c) return (c = . | Character.isDigit(c);/ 用于从缓冲区nbuf中提取数字private String extractNumber() return (nbuf.length() = 0) ? 0 : nbuf.toString();/ 用于组装数字private void buildNumber(char c) int i = nbuf.length();if (i = 0 & c = 0)return; / ignore leading zerosif (c = .) / at most one decim

16、al pointif (!before_point)return;elsebefore_point = false;nbuf.append(c);/ 重新清计算器private void reset() before_point =true;nbuf.setLength(0);num = false;/ 从标准输入设备中数放字符private int inchar() throws IOException return System.in.read();private String prompt = Calc: ; / 用于存储提示符private Calculator calc;privat

17、e String keys; / keys recognizedprivate StringBuffer nbuf; / buffer for input numberprivate byte prec; / max no of chars displayableprivate boolean before_point = true; / 记录是否出现了小数点private boolean num = false; / 缓冲区中全是数字时,为true/private String errString=只能输入 +-*/=NAC.和09之间的数字;private boolean errorMod

18、e=false;public void showStatus(String e)if(errorMode=true)prompt=CalcE: ;public void errorInput(String str)if(errorMode=true)System.out.println(errString);errorMode=false;/ Calculator.java /计算器控制对象public class Calculator public Calculator(CalcEng e, CalcFace f) eng = e;cf = f;f.setCalc(this);/ 计算的开关

19、public void on() throws java.io.IOException output(); / 计算器的入口点cf.input(); / 调用CalcFace中的input方法,该方法是一个循环/ 在CalcFace中若用户输入的数据即有合法数据,又包含一个运算符,/ 则该方法将被调用public void enterNumber(String number, char op) eng.setOperand(Double.parseDouble(number);enterOp(op);/ 若用户只输入了合法的运算符,则该方法将被调用public void enterOp(cha

20、r op) eng.operate(op);output(); / 该方法被调用时,output会被调用一次/ 输出数据private void output() double number = eng.getOutput();if(eng.status().equals(E)cf.showStatus(1);System.out.println(数字溢出,已重置!);cf.showNumber( + number);private CalcEng eng = null;private CalcFace cf = null;/ RunCalc.java /仿真计算器的测试程序public cl

21、ass RunCalc public static void main(String args) throws java.io.IOException CalcEng e = new CalcEng();CalcFace f = new CalcFace(e.keys(), e.precision();Calculator x = new Calculator(e, f);x.on();return;六.总结:对于这个程序,通过跟同学的交流,基本上可以看得懂,但是对于第二个CalcFace类的程序,很难理解,具体的哪个参数所代表的意思不知道怎么用,其他的两个都可以通过与同学交流都可以理解。总的来说就是对书本上的知识不理解以及不能灵活运用,由于java与C语言有挺多的不同,而且对于java的界面还不是很熟悉,全部都是用英文的。 所以我觉得,在学java的方法跟学C语言是差不多的,都是要靠自己平时多看书,多写程序,只有对书本上的知识有一定的了解,才能更好的运用在实验上,对于不懂的地方,要多跟同学和老师交流。也可以参考网上的资料,不懂的要先自己思考,是在不行再问人。 这次的实验有很多都是参考其他人的,但是可以基本上理解程序的内容。七、联系方式975016776

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号