结对项目总结 

这次的结对编程中,我负责的主要是出题、计算结果部分,我的搭档--夏昊负责的是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<<num;            //然后生成数字 
    if(tt<=pJunior)          //以一定概率生成平方 
        fout<<"^2";    
}

改了之后的代码是这样的:

 /**
     * 初中难度产生带有平方/开方符号的数字
     * @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

posted on 2018-10-08 14:23  吴静萱  阅读(238)  评论(2编辑  收藏  举报