结对项目分析

本次结对编程项目,我们使用了B/S模式,前端使用VUE+ElementUI,后端使用Spring Boot实现。我主要负责前端代码编写。

对个人项目代码的复用

个人项目实现我们两人分别为java和cpp,后端需要返回生成题目,主要使用我的cpp代码进行重构。生成题目我主要分为3个部分,使用了前缀表达式进行计算和生成。

  1. 生成前缀表达式

    该部分由黄锦鸿实现,传入操作数的数量和题目类型,生成一个前缀表达式返回。

  2. 根据前缀表达式得到中缀表达式

    从后往前遍历前缀表达式,遇到数字则入栈,遇到符号则数字出栈,组合后再入栈,并判断符号优先级添加括号。

点击查看代码
 public static String GenerateInfix(String in[]) { 	//根据前缀表达式生成中缀表达式
   		Stack<String> s=new Stack<String>();
   		int latest=1,now=1;//0 : +-   1 : */
   		
   		for(int i=in.length-1;i>=0;i--) {
   			if(isNum(in[i])||check(in[i])) {
   				s.push(in[i]);
   			}
   			else {
   				if(in[i]=="+"||in[i]=="-")
   					now=0;
   				else now=1;
   				if(latest==0&&now==1) {
   					s.push("("+s.pop()+")"+in[i]+s.pop());
   				}
   				else {
   					s.push(s.pop()+in[i]+s.pop());
   				}
   			}
   			latest=now;
   		}
   		return s.pop();
   	}
3. 根据前缀表达式计算结果

与2相似,但是在出栈时不进行字符串拼接,而是直接计算结果后入栈。

点击查看代码
public static String getResult(String in[]) { //计算结果
   		Stack<Double> s=new Stack<Double>();
   		Map<String,Double> map = new HashMap<>();
   		map.put("sin30°", 0.5);
   		map.put("sin60°", 0.866);
   		map.put("sin90°", 1.0);
   		map.put("cos30°", 0.866);
   		map.put("cos60°", 0.5);
   		map.put("cos90°", 0.0);
   		map.put("tan30°", 0.577);
   		map.put("tan60°", 1.732);
   		map.put("√4", 2.0);
   		map.put("√16", 4.0);
   		map.put("√64", 8.0);
   		map.put("2²", 4.0);
   		map.put("4²", 16.0);
   		map.put("8²", 64.0);
   		for(int i=in.length-1;i>=0;i--) {
   			if(isNum(in[i])) {
   				s.push(Double.valueOf(in[i]));
   			}
   			else if(check(in[i])){
   				s.push(map.get(in[i]));
   			}
   			else {
   				if(in[i]=="+") {
   					s.push(s.pop()+s.pop());
   				}
   				if(in[i]=="-") {
   					s.push(s.pop()-s.pop());
   				}
   				if(in[i]=="*") {
   					s.push(s.pop()*s.pop());
   				}
   				if(in[i]=="/") {
   					s.push(s.pop()/s.pop());
   				}
   			}
   		}
   		return String.format("%.2f", s.pop());
   	}

总结

​ 本次结对编程项目使用了前后端分离的B/S模式,我使用VUE进行前端网页编码。在编写的过程中遇到了许多问题,如组件之间如何跳转等。

  1. 组件跳转

    使用<slot>,所有组件都展示在app.vue中,使用路由进行组件跳转

  2. 跨域

    前后端分离时,会存在跨域问题,在后端设置允许跨域即可解决

  3. 部署

    部署后出现了白屏现象,发现是路由设置成了hash模式,取消hash模式即可。