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

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

  • 结对学习的照片已经放到蓝墨云班课里面了

posted on 2018-04-22 22:08  wo爱java  阅读(353)  评论(1编辑  收藏  举报

导航