zoukankan      html  css  js  c++  java
  • 20165104孟凡斌-结对编程练习(第二周)

    20165104孟凡斌-结对编程练习(第二周)

    很不幸,这次的结对练习作业的难度,依然远远远超出我,我的搭档两人得能力范围。结对学习,变成了结对向同学请教学习。两个人一起问,确实效率高一点,每周保持这样的学习状态,虽说很累,但确实比原来懒散的我学习好很多。
    需求分析

    题目要求

    自动生成小学四则运算题目(加、减、乘、除)

    支持整数

    支持多运算符(比如生成包含100个运算符的题目)

    支持真分数

    统计正确率

    扩展要求

    处理生成题目并输出到文件

    完成题目后从文件读入并判题

    多语言支持:简体中文, English

    生成题目不能去重

    • 去重:程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。

    实现思路

    中缀表达式转换为后缀表达式

    • 如果遇到数字,我们就直接将其输出。
    • 如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈。
    • 如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈。
    • 如果遇到运算符号且栈非空,查看栈顶元素,如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符。最后将该元素入栈。
    • 如果我们读到了输入的末尾,则将栈中所有元素依次弹出。

    计算后缀表达式

    public int doCal(List<String> list){
            Stack<Integer> stack = new Stack<Integer>();
            for(int i=0;i<list.size();i++){
                String s = list.get(i);
                int t=0;
                if(!isOp(s)){
                    t = Integer.parseInt(s);
                    stack.push(t);
                }else{
                    if(s.equals("+")){
                        int a1 = stack.pop();
                        int a2 = stack.pop();
                        int v = a2+a1;
                        stack.push(v);
                    }else if(s.equals("-")){
                        int a1 = stack.pop();
                        int a2 = stack.pop();
                        int v = a2-a1;
                        stack.push(v);
                    }else if(s.equals("*")){
                        int a1 = stack.pop();
                        int a2 = stack.pop();
                        int v = a2*a1;
                        stack.push(v);
                    }else if(s.equals("/")){
                        int a1 = stack.pop();
                        int a2 = stack.pop();
                        int v = a2/a1;
                        stack.push(v);
                    }
                }
            }
            
    

    码云链接

    UML类图

    代码框架

    学习感受

    延续了上一周的焦头烂额....果然和我预料的一摸一样

    BUT

    谢谢我的搭档。两个人一起向同学请教学习,说实话,确实两个人一起问,不懂得互相交流,学起来快乐多了~

    • 结对学习的照片已经放到蓝墨云班课里面了
  • 相关阅读:
    云产品-容器镜像服务(CR)
    mysql中写sql的好习惯
    关于Redis的一些问题
    解决zookeeper在windows下启动闪退的问题
    SQL-基于派生表的查询
    exec()内置方法
    CentOS 7使用yum无法安装htop等工具的解决办法
    CentOS7更换yum源为阿里云yum源
    坑(二十)——正则分组返回结果
    坑(十九)—— Git clone 时遇到fatal: protocol 'https' is not supported问题解决方案
  • 原文地址:https://www.cnblogs.com/20165104mfb/p/8909952.html
Copyright © 2011-2022 走看看