软件工程网络15结对编程作业(201521123045)

一.结对编程成员:

郑子熙(201521123045):https://gitee.com/zhengzixi/projects

陈文俊(201521123047):https://gitee.com/chendajia/pair_programming

二.对原有程序分析:

    我们选择的是第二组的代码,代码缺陷较大,无法实现如连加,加和乘一起运算的这些简单功能,也无法进行有括号的四则运算,我们只能进行大范围的修改。

 

三.改进现有代码:

经过我们的修改后,可以实现复杂的带括号四则运算。

 

 

 

四.代码展示:

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CalcFunction {
        private String result;
        public void calc(String strExpression)    
        {
            String s = simplify(strExpression);
            String numStr = "";
            Stack<Character> opeStack = new Stack<>();    
            int l = s.length();
            List<String> list = new ArrayList<>();
            
            for(int i=0;i<l;i++)
            {
                char ch = s.charAt(i);
                
                if(isAllOpe(ch))                
                {    
                    if(numStr!="")
                    {
                        list.add(numStr);
                        numStr="";
                    }
                    
                    
                    if(ch=='(')
                    {
                        opeStack.push(ch);                    
                    }
                    else if(isOpe(ch))
                    {
                        char top = opeStack.peek();
                        if(isGreater(ch, top))                        
                        {
                            opeStack.push(ch);
                        }
                        else
                        {                        
                            while(true)                    
                            {    
                                char t=opeStack.peek();
                                if(t=='(')
                                    break;                            
                                if(isGreater(ch, t))
                                    break;
                                
                                list.add(Character.toString(t));
                                t=opeStack.pop();
                            }
                            opeStack.push(ch);
                            
                        }
        
                    }
                    else if(ch==')')
                    {
                        char t = opeStack.pop();                
                        while(t!='('&&!opeStack.isEmpty())
                        {
                            list.add(Character.toString(t));
                            t = opeStack.pop();
                        }    
                    }

                }
                else
                {
                    numStr+=ch;
                }
            }
        
            Stack<Integer> num = new Stack<>();
            int size = list.size();
            for(int i=0;i<size;i++)
            {
                String t =list.get(i);
                if(isNumeric(t))
                {
                    num.push(Integer.parseInt(t));
                }
                else
                {                    
                    char c = t.charAt(0);
                    int b = num.pop();                    
                        int a = num.pop();                    
                        switch(c)
                        {
                            case '+':
                                num.push(a+b);
                                break;
                            case '-':
                                num.push(a-b);
                                break;
                            case '*':
                                num.push(a*b);
                                break;
                            case '/':
                                num.push(a/b);
                                break;
                            default:
                                break;        
                        }
            }
            }
            System.out.println(num.pop());
        }
        
        public static String simplify(String str)
        {        

            String s = str.replaceAll("(?<![0-9)}\\]])(?=-[0-9({\\[])", "0");    
            s = s.replace('[', '(');
            s = s.replace('{', '(');
            s = s.replace(']', ')');
            s = s.replace('}', ')');
            s="("+s+")";
            return s ;
        }
        

        public static boolean isOpe(char c)
        {
            if(c=='+'||c=='-'||c=='*'||c=='/')
                return true;
            else        
                return false;
        }
        
        public static boolean isAllOpe(char c)
        {
            if(c=='+'||c=='-'||c=='*'||c=='/')
                return true;
            
            else if(c=='('||c==')')
                return true;
            else        
                return false;
        }
        

        public static boolean isGreater(char a,char b)
        {    
                int a1 = getLevel(a);
                int b1 = getLevel(b);
                if(a1>b1)
                    return true;
                else
                    return false;
        }
        

        public static int getLevel(char a)
        {

            if(a=='+')
                return 0;
            else if(a=='-')
                return 1;
            else if(a=='*')            
                return 3;
            else if(a=='/')
                return 4;
            else 
                return -1;

        }


         public static boolean isNumeric(String str){
             Pattern pattern = Pattern.compile("[0-9]*");
             Matcher isNum = pattern.matcher(str);
             if( !isNum.matches() ){
                 return false;
             }
             return true;
      }    
    
}

 

五.PSP:

 

六.实验小节:

1.两个人合作的效率远远大于一个人,项目还是有些不足,对分数的处理还不是很完善,由于时间有限只能暂时先做到这,之后会慢慢修改完善。

posted @ 2018-03-25 16:23  郑子熙  阅读(154)  评论(0编辑  收藏  举报