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 原则

  • 相关阅读:
    zBrow发布倒计时:对不起,让大家久等了
    《zBrow的资本论》
    zBrow智能浏览器
    zspt界面截图
    电商领域,唯一的“发明”级国家专利。
    zBrow界面截图截图
    zBrow多开界面截图
    网页滚动条样式
    关于margin参数解读
    JAVA的抽象类和抽象方法
  • 原文地址:https://www.cnblogs.com/linanlalala/p/9011544.html
Copyright © 2011-2022 走看看