软件工程网络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.两个人合作的效率远远大于一个人,项目还是有些不足,对分数的处理还不是很完善,由于时间有限只能暂时先做到这,之后会慢慢修改完善。