上次作业的升级版

好好好

211606375 牛振乾
211606351 曾茜

一、预估与实际

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

二、需求分析

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

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

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

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

三、设计

1.设计思路
  • 关键流程图
    1472369-20180919000928358-1237476527.png
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 stack = new Stack();
    //遍历数组中的每一个元素
    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 ;
    }
    }
    }

    3.代码规范
  • 减少代码嵌套次数
  • 尽量不要用参数来带回方法运算结果
  • 避免使用类似名字,或仅仅是大小写不同的名字
  • 循环计数器 通常采用i,j,k或者counter都可以接受

    五、测试

    1472369-20180919000314759-1264974028.png

六、总结

结对对我们还是有好处的,有时候可以一个人不会的知识点林一个人就可以马上上手进行讲解,但是也有一些坏处,就是在一些问题上有分歧,或者两个人都不会的知识点,因为我们遵循男女搭配干活不累的原则——所以导致我们有时候只能进行语音,一些问题不能很好的解决。所以在下次作业上总店解决这些问题。这次就先附上语音的截图啦~~~~~~~
1472369-20180919000803134-1908129277.png

转载于:https://www.cnblogs.com/112233niu/p/9672263.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值