本次结对编程项目,我们使用了B/S模式,前端使用VUE+ElementUI,后端使用Spring Boot实现。我主要负责前端代码编写。
对个人项目代码的复用
个人项目实现我们两人分别为java和cpp,后端需要返回生成题目,主要使用我的cpp代码进行重构。生成题目我主要分为3个部分,使用了前缀表达式进行计算和生成。
-
生成前缀表达式
该部分由黄锦鸿实现,传入操作数的数量和题目类型,生成一个前缀表达式返回。
-
根据前缀表达式得到中缀表达式
从后往前遍历前缀表达式,遇到数字则入栈,遇到符号则数字出栈,组合后再入栈,并判断符号优先级添加括号。
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进行前端网页编码。在编写的过程中遇到了许多问题,如组件之间如何跳转等。
-
组件跳转
使用<slot>,所有组件都展示在app.vue中,使用路由进行组件跳转
-
跨域
前后端分离时,会存在跨域问题,在后端设置允许跨域即可解决
-
部署
部署后出现了白屏现象,发现是路由设置成了hash模式,取消hash模式即可。