首页 > 其他 > 详细

作业2

时间:2018-09-19 01:16:25      阅读:273      评论:0      收藏:0      [点我收藏+]

对对对

211606375 牛振乾
211606351 曾茜

一、预估与实际

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
? Estimate ? 估计这个任务需要多少时间 40 40
Development 开发 900 1000
? Analysis ? 需求分析 (包括学习新技术) 60 100
? Design Spec ? 生成设计文档 60 90
? Design Review ? 设计复审 40 60
? Coding Standard ? 代码规范 (为目前的开发制定合适的规范) 20 30
? Design ? 具体设计 200 230
? Coding ? 具体编码 400 400
? Code Review ? 代码复审 40 60
? Test ? 测试(自我测试,修改代码,提交修改) 60 90
Reporting 报告 60 60
? Test Repor ? 测试报告 30 40
? Size Measurement ? 计算工作量 30 30
? Postmortem & Process Improvement Plan ? 事后总结, 并提出过程改进计划 20 20
合计 1130

二、需求分析

我通过百度的方式了解到,小学三年级数学有如下的几个特点:

  • 有混合运算
  • 可以有括号的出现

经过分析,我认为,这个程序应当:

  • 减法运算的结果不能有负数
  • 除法运算除数不能为0,不能有余数
  • 运算符在2~4个
  • 可以有括号

三、设计

1. 设计思路

说明你如何设计这个程序
类图

中缀转后缀程序流程图(好难啊这个)
技术分享图片

2. 实现方案

中缀表达式转换为后缀表达式
你需要设定一个栈SOP,和一个线性表 L 。SOP用于临时存储运算符和分界符( ,L用于存储后缀表达式。
遍历原始表达式中的每一个表达式元素
(1)如果是操作数,则直接追加到 L中。只有 运算符 或者 分界符( 才可以存放到 栈SOP中
(2)如果是分界符
Ⅰ 如果是左括号 ( , 则 直接压入SOP,等待下一个最近的 右括号 与之配对。
Ⅱ 如果是右括号),则说明有一对括号已经配对(在表达式输入无误的情况下)。不将它压栈,丢弃它,然后从SOP中出栈,得到元素e,将e依次追加到L里。一直循环,直到出栈元素e 是 左括号 ( ,同样丢弃他。
(3)如果是运算符(用op1表示)
Ⅰ如果SOP栈顶元素(用op2表示) 不是运算符,则二者没有可比性,则直接将此运算符op1压栈。 例如栈顶是左括号 ( ,或者栈为空。
Ⅱ 如果SOP栈顶元素(用op2表示) 是运算符 ,则比较op1和 op2的优先级。如果op1 > op2 ,则直接将此运算符op1压栈。
如果不满足op1 > op2,则将op2出栈,并追加到L,重复步骤3。
也就是说,如果在SOP栈中,有2个相邻的元素都是运算符,则他们必须满足:下层运算符的优先级一定小于上层元素的优先级,才能相邻。

最后,如果SOP中还有元素,则依次弹出追加到L后,就得到了后缀表达式。

摘抄自【算法】表达式求值--逆波兰算法介绍

四、编码

请说明你如何按照设计思路进行编码,并记录你在开发中遇到的问题,与解决过程

1. 调试日志

记录编码调试的日志,请记录下开发过程中的 debug 历程

比如:

  • 将代码全部设为静态私有变量,方便使用
  • 在逆波兰方法中要设立优先级。

2. 关键代码

//逆波兰表达式 后缀运算 用于混合运算 private static String ReversePolish (String[] strArr){ String str = "+-*/"; Stack<String> stack = new Stack<String>(); //遍历数组中的每一个元素 for(String s : strArr){ //如果是数字,放入栈中 if(!str.contains(s)){ stack.push(s); } else{ int a = Integer.valueOf(stack.pop()); int b = Integer.valueOf(stack.pop()); switch(s){ case "+" : stack.push(String.valueOf(a+b)); break; case "-" : stack.push(String.valueOf(a-b)); break ; case "*" : stack.push(String.valueOf(a*b)); break; case "/" : stack.push(String.valueOf(a/b)); break ; } } } return stack.pop(); }

3. 代码规范

  • 减少代码嵌套层次
  • 尽量不用参数来带回方法运算结果
  • 避免变量的定义与上一层作用域的变量同名
  • 避免使用类似的名字,或者仅仅是大小写不同的名字
  • 循环计数器 通常采用字母 i,j,k 或者 counter 都可以接受。

五、测试

测试的输出结果
技术分享图片

六、总结

结对作业确实能从一定程度上提高了我们完成作业的效率,但是从另一方面看起来又有新的问题出现。比如两个人的意见出现分叉,两个人都不会写某个方法等等。由于我们是男女生混合,并没有很多的时间当面讨论,更多情况只能通过语音在qq上截图交流,所以没有结对工作照的我们只能挂上语音截图了,个人感觉这并不是很影响我们的沟通。还有令人头疼的问题就是,之前的没学清楚又有新的东西要开始看,新的资料一份接着一份...加上其他课程的作业,有的时候真的会烦躁静不下心。和队友的配合还是要多磨合,还要花时间去适应这种学习方式。
技术分享图片

作业2

原文:https://www.cnblogs.com/ZQNB666/p/9665638.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!