结对项目总结
这次的结对编程中,我负责的主要是出题、计算结果部分,我的搭档--夏昊负责的是UI,前端的部分。其中出题部分是上一次用C++写过一次的,而这次主要是把原来的代码换成JAVA语言来写,下面是在编写程序的时候遇到的主要困难和总结:
前端部分:
由于我做的是后端的部分,对于前端的知识没有深入了解,只是大致看了下大佬的代码,大佬真的是做了很多工作:
文件、类、方法等命名写的很规范,界面内容写的也很细致,每个界面呈现什么内容,如何跳转,思路清晰;这方面的知识以后还是要多多学习下。
截图:
自己尝试写了一小部分播放音乐的功能,感觉还挺有意思的(可能因为这部分代码比较简单)
后端部分:
一、在用Java重新写程序时:
1.JAVA语言的使用不熟练,编写程序的时候会因为一些不起眼的小错误而耽搁很长时间:
比如,一个很简单的东西:JAVA语言中布尔类型是boolean,在写程序的时候,顺手写成了bool,还一直奇怪怎么会报错,这么简单的问题一时没有转过弯来=_=!
2.完善了部分代码
(1)之前的生成算式的部分,对数字没有细分,比如,tan90不存在的情况,在这一次的项目中对这里进行了改进;
(2)由于JAVA的封装性,本来在C++中定义的全局变量,在JAVA中会破坏封装性,对一部分代码进行了改进,把全局变量作为方法参数,在需要改变的时候可以通过改变参数以达到相应的目的。
比如,在生成初中数字的部分:
原来的代码是这样的:
int pJunior=2; //改变生成开方或者平方的概率 (全局变量)/*功能: 初中难度产生数字参数:fout:文件对象 */void juniorNum(ofstream &fout) { int tt=rand()%9; int num; do{ num=rand()%MAX_NUM; }while(num==0); if(tt>7) //以一定概率生成根号 fout<<"√"; fout<
改了之后的代码是这样的:
/** * 初中难度产生带有平方/开方符号的数字 * @param pJunior 改变生成平方/开方的概率,以保证算式中至少有一个平方或者开方的符号 * @return 字符串类型的数字 */ public static String juniorNum(int pJunior) { Random ran=new Random(); int t=ran.nextInt(9); int num=ran.nextInt(100)+1; String q=""; if(t>6) { q+="√"; } q+=String.valueOf(num); if(t<=pJunior) { q+="^2"; } return q; }
二、在写计算算式的结果部分:
1.eval()函数
很偶然的在网上查到了,eval()函数可以计算字符串,包括带括号的,也就是说eval()函数可以计算小学难度的算式,然后初中和高中的算式可以先把开方和平方以及三角函数处理了,然后再调用小学的计算方法,思路很简单,极大的精简了代码,节约了很多时间;
但是,这里有一个特殊之处:初中以及高中的算式在生成时,平方、开方以及三角函数都是紧跟着数字出现的,不会出现sin(45+45)、(2+12)^2类似的式子,为计算部分提供了很大的便利,使得上述计算方法可以顺利执行。
但是这种方法也有缺点:
就是可移植性不高,普遍适用性不强,这种方法在这里可以使用,但是在别的程序中遇上(2+12)^2这样的式子,就会出问题;而且eval()函数是javaScript里面的方法,感觉在这里使用有点投机取巧。。感觉没有很好地训练到自己的编程能力,以后把入栈出栈的方法补上。
下面是使用eval()函数的部分代码:
/** * 计算小学难度的试题 * @param str * @return 小学难度的字符串答案 */ public static String primaryCal(String str) { ScriptEngine se = new ScriptEngineManager().getEngineByName("JavaScript"); String result=""; try { double d =Double.parseDouble(se.eval(str).toString());//转化为double类型 result=String.format("%.2f", d);//保留2位小数 } catch (ScriptException e) { e.printStackTrace(); } return result; }
ps:前面要加上包:
import javax.script.*;
2.对计算部分进行了封装
把原来的计算不同难度算式的函数封装到了一个函数中,调用更加方便。
对接部分:
通过这次结对项目,真的切身体会到沟通真的很重要!沟通真的很重要!沟通真的很重要!(重要的事情说三遍),刚开始在我们各自大概完成各自的部分后,尝试着拼起来,刚开始还好,但是在最后两天,因为沟通不到位,出现了乌龙,最后还是多亏了夏昊大佬解决了问题(给大佬递可乐)。
总的来说还是觉得,在这个项目里我的搭档--夏昊做的部分比较多,对接的时候能跟他学到很多,也能感受到他的学习能力很强,向大佬学习。orz