zoukankan      html  css  js  c++  java
  • 20172333 2017-2018-2 《程序设计与数据结构》四则运算报告(2)

    20172333 2017-2018-2 《程序设计与数据结构》实验2报告(2)

    1.结对成员

    严域俊20172333

    2.小组结对合作图片


    3.项目中自己负责的部分

    package ddaadada;
    import java.util.*;
    public class LT {
    
        public char[] op = {'+','-','*','/','(',')'};
        public String[] strOp = {"+","-","*","/","(",")"};
        public boolean isDigit(char c){
            if(c>='0'&&c<='9'){
                return true;
            }
            return false;
        }
        public boolean isOp(char c){
            for(int i=0;i<op.length;i++){
                if(op[i]==c){
                    return true;
                }
            }
            return false;
        }
        public boolean isOp(String s){
            for(int i=0;i<strOp.length;i++){
                if(strOp[i].equals(s)){
                    return true;
                }
            }
            return false;
        }
        /**
         * 处理输入的计算式
         * @param str
         * @return
         */
        public List<String> work(String str){
            List<String> list = new ArrayList<String>();
            char c;
            StringBuilder sb = new StringBuilder();
            for(int i=0;i<str.length();i++){
                c = str.charAt(i);
                if(isDigit(c)){
                    sb.append(c);
    
                }
                if(isOp(c)){
                    if(sb.toString().length()>0){
                        list.add(sb.toString());
                        sb.delete(0, sb.toString().length());
                    }
                    list.add(c+"");
                }
            }
            if(sb.toString().length()>0){
                list.add(sb.toString());
                sb.delete(0, sb.toString().length());
            }
            return list;
        }
        public void printList(List<String> list){
            for(String o:list){
                System.out.print(o+" ");
            }
        }
        /**
         * 中缀表达式转化为后缀表达式
         * 1,遇到数字输出
         * 2,遇到高优先级的全部出栈
         * 3,最后全部出栈
         */
        public List<String> InfixToPostfix(List<String> list){
            List<String> Postfixlist = new ArrayList<String>();//存放后缀表达式
            Stack<String> stack = new Stack<String>();//暂存操作符
            //stack.push('#');
            for(int i=0;i<list.size();i++){
    
                String s = list.get(i);
                if(s.equals("(")){
                    stack.push(s);
                }else if(s.equals("*")||s.equals("÷")){
                    stack.push(s);
                }else if(s.equals("+")||s.equals("-")){
                    if(!stack.empty()){
                        while(!(stack.peek().equals("("))){
                            Postfixlist.add(stack.pop());
                            if(stack.empty()){
                                break;
                            }
                        }
                        stack.push(s);
                    }else{
                        stack.push(s);
                    }
                }else if(s.equals(")")){
                    while(!(stack.peek().equals("("))){
                        Postfixlist.add(stack.pop());
                    }
                    stack.pop();
                }else{
                    Postfixlist.add(s);
                }
                if(i==list.size()-1){
                    while(!stack.empty()){
                        Postfixlist.add(stack.pop());
                    }
                }
            }
            return Postfixlist;
        }
        /**
         * 后缀表达式计算
         */
        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);
                    }
                }
            }
            return stack.pop();
        }
    

    4.个人贡献度划分

    可以说应该算是各自百分之五十吧,因为我们组内就两个人,所以分工很明确的,由他完成题目输出而我则是中缀转后缀,但是现在面临合并的问题,然后我两共同思考编写方法,所以没有说谁偷懒之类的,大家都很努力编写,也希望尽快完成吧。


    5.相关代码截图

    1.生成题目(一共四级题目+-*/,每一级都可能含有分数随机的)

    2.中缀转后缀加计算 图1234

    3.判断答案及其正确率 图1


    6.关键代码

    1.生成题目(代码上一部分有)

    • [x] 思路解释:我们原本是要用符号个数来代表题目等级的,后来涉及到中缀转后缀不方便,就换了一个思路,那就是分为0,1,2,3四个等级,每一个等级都只有两个数进行+——*/等运算,在这个运算中随机可能会含有分数形式的一个输出题目。

    2.中缀转后缀(代码备注中有)

    • [x] 思路解释:第一步处理题目,第二步
      中缀表达式转化为后缀表达式 1遇到数字输出 2遇到高优先级的全部出栈 3最后全部出栈,第三步后缀表达式计算。

    3.判断结果并输出正确率

    • [x] 思路解释:就是单纯的布鲁型If判断语句,最后在输出正确答案,至于输出正确率则是在生成题目中含有。

    7.遇到的困难及解决方法

    • [x] 1.最最严重的问题:由于之前刚开始的单独作战,导致了一个非常严重的问题,我做的题目输出是一次性多次题目出现,而李楠的中缀转后缀是只接受一个题目,就会导致我们现在完全对接不上,导致这个四则运算没有完成。

      解决方法:目前尚未解决。

    参考资料

    2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算

    结对编程项目-四则运算

    S.O.L.I.D 原则

  • 相关阅读:
    【算法学习笔记】27.动态规划 解题报告 SJTU OJ 1254 传手绢
    【算法学习笔记】26.扫描维护法 解题报告 SJTU OJ 1133 数星星
    【算法学习笔记】25.贪心法 均分纸牌问题的分析
    【算法学习笔记】24.记忆化搜索 解题报告 SJTU OJ 1002 二哥种花生
    【算法学习笔记】23.动态规划 解题报告 SJTU OJ 1280 整装待发
    【算法学习笔记】22.算法设计初步 二分查找 上下界判断
    【算法学习笔记】21.算法设计初步 求第k个数 划分法 快排法
    【算法学习笔记】20.算法设计初步 归并排序 求逆序数
    【算法学习笔记】19.算法设计初步 最大子列和问题的几种方法
    【算法学习笔记】18.暴力求解法06 隐式图搜索2 八数码问题 未启发
  • 原文地址:https://www.cnblogs.com/linanlalala/p/9011544.html
Copyright © 2011-2022 走看看