阶段编程四则运算(挑战出题)

结队成员: 刘伟康

学号: 20162329

期望分数分配: 30%刘伟康,70%张旭升

一.需求分析

1.在命令行参数中输入题目数量和等级后可将题目输出到文件中(只出题不判题)

注:该功能我们在两周之前就已经可以达到了(但是上周的结对编程四则运算中却没有给我们加这部分分值)所达到的效果如下:

2.生成题目中去除重复题目

3.(个人拓展)可以使用户在文件中作答后运行另一个程序判断正误且结果写入另一个文件

java OutputTest.java FileName1 FileName2

二.设计思路

UML类图:

这次的项目我还是在上次的四则运算的基础上完成的,因为之前就已经完成了题目输出至文件的功能,这次只需要修改其支持命令行参数和支持去重即可,具体解释如下:
对于修改命令行参数:
我设计的题目生成的方法需要传入两个int类型的参数,即题目数量和题目的题目等级(运算符号的多少),在main函数中将命令行参数中输入的第一个和第二个参数都使用Integer.parseInt()方法转化为int类型然后传给生成题目的方法。
对于题目去重(根据计算答案):
我在生成题目的方法中将生成的每一个题目都放在一个列表中,然后在每生成一个题目时就会先对题目进行计算,将计算的答案传入另一个列表,然后利用indexOf方法来判断前面放入该列表的答案是否有和该答案重复的,如果有就去掉改答案对应的题目。

三.关键代码解释

            for (String i : list1)   ti += i;StringTokenizer tokenizer = new StringTokenizer(ti);while (tokenizer.hasMoreTokens()) {char N = tokenizer.nextToken().charAt(0);list3.add(N);}list1.clear();Collections.sort(list3);for(char i:list3)Ti += i;list3.clear();ori.evaluate(ti);String restrult = count.evaluate(ori.getMessage());if (list2.indexOf(restrult) >= 0)if (list4.indexOf(Ti)>=0)j--;else if(Ti.indexOf("(")>=0)j--;else {list4.add(Ti);list.add(ti);}else {list2.add(restrult);list4.add(Ti);list.add(ti);}

以上代码取自src -> Practice.java -> 64行至90行


  • list中存放的是带输出的式子
  • list1中存放的是一个一个的数和运算符和括号
  • list2中存放的是答案
  • list3中存放的是排序或待排序的式子
  • list4中存放的是存放排序后不重复的式子
  • 利用简易的for循环将其中的元素取出来然后累加在一起就成为了一个完整的运算式
  • 将式子以空格为分隔符分成char类型的单字符存入list3
  • list1清空以便于下一道题目的生成,然后运用sort方法对list3进行排序
  • 遍历出list3中的元素累加后赋值给变量Ti
  • 清空list3便于下一个题目的判断
  • 将生成的题目作为参数传给后缀表达式的转换方法ori.evaluate()
  • 将该题计算的答案传入list2
  • 对答案进行判断,是否list2中已经存在该答案,如果存在的话就再判断list4中是否存在排序后依旧相同的式子,如果存在就重新出题,如果不存在就再排除掉因为不同位置加括号所以重复的题目之后将该题目加入输出列表list,如果list2中不存在相同答案就把该题目传入输出列表list等待输出。

四.测试方法


运用老师给出的测试工具测试


结果如下:






五.运行过程截图




六.代码托管

七.遇到的困难即及解决方法

问题 解决方案
问题1:因为之前我们使用的去重方法是只用答案去重,并且我们的数据中存在分数,并不满足输出需求,当将分数去掉后我们的去重方法就出现了问题,就是在测试100道一个运算符的题目时题目会不足100个导致程序会进入一个死循环,具体问题是程序将把类似3 -36-67-7等都当做一个题目,对此问题解决方案如下。 我们的具体解决方案就是对去重结构进行调整,我们在判断答案相同后会再进行一个判断,就是将题目中的元素按一定顺序排序后比较是否相同,只有题目相同,式子相同才会被当做一个题目去掉。
问题2:上一个问题解决后我们运行程序,又出现了一个问题,就是当加括号时可能会出现把4+7+6/86/8+(4+7)当做不同的题目,对此问题解决方案如下 我们又在式子判断不同的情况下又加了一个判断,是否是因为有括号而不同,就排除了因为括号而判断错误的情况!

八.对结队伙伴的评价


对于我的结队伙伴刘伟康同学,他的问题还比较多,在我看来他的很多思想都是很好的,但是他总是不去自己试着实现,有想法总是先告诉我(这一点没问题)然后我说“嗯,不错你去做出来”,他每次回答都是不会,导致许多东西都是我来做的。但是好在他写博客非常认真,这也是他每次分数都比我高的原因,因为老师最终看的只不过是我们的博客而已,代码什么的好像都无所谓。所以我也就不想说什么了。


PSP表

PSP2.1 Personal Software Process Stages 预估耗时(小时) 实际耗时(小时)
Planning 计划 1 1
· Estimate · 估计这个任务需要多少时间 20 20
· Analysis · 需求分析 (包括学习新技术) 1 3
· Design Spec · 生成设计文档 0.5 0.5
· Design Review · 设计复审 (和同事审核设计文档) 1 0.5
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 1 0.5
· Design · 具体设计 2 3
· Coding · 具体编码 2 4
· Code Review · 代码复审 2 1
· Test · 测试(自我测试,修改代码,提交修改) 2 1
·Reporting ·报告 1 1.5
· Test Report · 测试报告 2 2.5
· Size Measurement · 计算工作量 0.5 0.5
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 1 1

转载于:https://www.cnblogs.com/Zhangxusheng/p/6934951.html

20162329 张旭升 阶段四则运算(挑战出题)相关推荐

  1. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第七周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第七周学习总结 教材学习内容总结 通过继承实现多态:若两个类是is-a关系,将子类对象向上转型为父类后该变量就可以实现 ...

  2. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第八周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第八周学习总结 教材学习内容总结 1.异常的产生:当程序中出现不符合计算机逻辑的情况,在编译运行时就会出现异常. 2. ...

  3. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第九周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 1.建立数据库连接:我们是通过老师给的XAMPP程序来配置自己的数据库,然后根据教程 ...

  4. 20162329 张旭升2016-2017《程序设计与数据结构》课程总结

    课程总结 前期博客 预备作业即周总结: 预备作业01 20162329: 预备作业02 20162329: 预备作业03 20162329: 20162329 <程序设计与数据结构>第一周 ...

  5. 20162329 张旭升 实验三:实验报告

    实验三:实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 张旭升 学号:20162329 指导教师:娄嘉鹏 王志强 实验日期:5月12日 实验密级: 非密级 预习程度: 已预习 必修/选修 ...

  6. 2017—2018 20162329 张旭升 实验报告:树

    实验二:数 课程:程序设计与数据结构 班级: 1623 姓名: 张旭升 学号:20162329 指导教师:娄嘉鹏 王志强 实验日期:10月23日 实验密级: 非密级 预习程度: 已预习 必修/选修: ...

  7. 2017-2018 20162329 张旭升 实验报告:实验三

    实验二:查找与排序 课程:程序设计与数据结构 班级: 1623 姓名: 张旭升 学号:20162329 指导教师:娄嘉鹏 王志强 实验日期:11月6日 实验密级: 非密级 预习程度: 已预习 必修/选 ...

  8. 20162329 张旭升 实验二:实验报告

    实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 张旭升 学号:20162329 指导教师:娄嘉鹏 王志强 实验日期:4月14日 实验密级: 非密级 预习程度: 已预习 必修/选修: 必修 ...

  9. 2017-2018 20162329 张旭升 实验报告:实验四

    实验四:图及应用 课程:程序设计与数据结构 班级: 1623 姓名: 张旭升 学号:20162329 指导教师:娄嘉鹏 王志强 实验日期:11月22日 实验密级: 非密级 预习程度: 已预习 必修/选 ...

最新文章

  1. android自定义文件选择,关于安卓自定义本地文件选择库的实现
  2. js callback回调的一种写法
  3. 2018程序员必备碎片化学习工具(年度精选)
  4. yourtour的几种链接
  5. RLE重铸回归方法的荣光后,回归和热图的异同究竟在何方?
  6. 【数据结构与算法】之深入解析“排列序列”的求解思路与算法示例
  7. FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP)
  8. 2B: 怎么把黑科技卖给顶级金融机构? | 甲子光年
  9. 组态王中Modbus字节顺序的调整
  10. 使用CANoe进行Panel设计
  11. error: C++ requires a type specifier for all declarations
  12. SSL证书中DV、OV、EV证书的区别有哪些
  13. tortoise冲突处理
  14. 高中毕业,从事测试岗,在35岁之前却因为运维而加薪了。
  15. 《软件开发与创新:ThoughtWorks文集:续集》
  16. 顺丰--Java丰桥接口整体封装(下单、查询、打印)
  17. Atom编辑器入门到精通(四) Atom使用进阶
  18. 【前端】JavaScript与正则表达式
  19. 2020年面试官常问点总结
  20. 使用pip install安装自定义工具包(PyPI平台)

热门文章

  1. PowerDesign连接远程数据库
  2. 魔兽世界服务器是否在维护,魔兽世界服务器再次关闭 关服紧急维护
  3. 自己收藏的一批AE模板,AE插件,喜欢的可以收藏!
  4. 网站策划,网站建设的重中之重
  5. 数据结构(Java版2022-10-29)
  6. 感觉有点萌的生物学家转载的博文
  7. app内执行apk安装报错:exposed beyond app through Intent.getData()
  8. Linux覆盖分区表,如何来救回被win覆盖的linux分区信息
  9. python数据存储和查询代码_【Python分享】如何便捷地存储、查询数据
  10. c语言编程建议和技巧,C语言程序设计学习技巧