首先分析一下在个人项目中我们两个算法的区别,主要的生成题目中的算法,本次结对项目中要复用的也是这部分。
算法一:
用C++编写,使用vector<string>数据结构,采用插入的方式生成括号和一些运算符,算法过程如下。
先随机一个数插入vector首,再随机出运算符个数,采用循环依次生成运算符、数字,这样就产生了小学题目。
初中题目为在小学题目基础上插入括号,先插入左括号,遍历已经生成小学题目的vector,因为左括号可以插入数字和其他左括号前,所以
当遍历到数字和左括号是就随机判断是否要插入括号。
同理^0.5和^2只能在数字和右括号后,继续插入^0.5和^2,这样就生成了初中题目,高中题目也类似,在初中题目的基础上再加入三角函数。
算法二:
用C++编写,采用数组顺序插入(string末尾append)生成题目。
先建一个数组,用不用数字代表不同符号(运算符和数字),在数组中随机生成这些代表,在根据这个数组生成相应的符号append到string中。
两种算法在结对项目中分析:
由于要求生成每道题目的结果,如果采用算法二,由于全是字符串,拆分有点复杂,如每一个数字是一位还是两位都要判断并进行转换,而且根号
和平方运算符以及三角函数作为一个字符串的转换比较复杂。而算法一中这些运算符都是作为一个整体,比较容易处理并计算结果,所以我们决定
复用算法一。
结对项目需求分析:
三个关键需求:客户端界面、短信验证登录功能以及给出每题参考答案并评分。
如果继续用C++编写,就要自学QT,工作量较大,而且短信验证接口大都不支持C++,所以我们决定放弃C++,重新改用java写,但实际上
由于我们做个人项目时封装较好,同样的函数和class从C++中拷入java中运行完全没有问题,这部分关键代码的复用就减少了我们的很多工作。
1,客户端界面我们采用java中swing组件和awt中的事件处理
2,短信接口采用阿里云的短信API
3,对于每道题目答案的计算也是本次项目的难点,我们自己也想过一些方法,比如多括号式子,可以遍历题目从最内层最左边括号递归计算。
后来在网上也找了一些方法,最后我们采用后缀表达式的方法来计算题目答案。参考文章:
https://blog.csdn.net/qq_36763635/article/details/72627601
项目总结:
通过看对方的代码,和自己的对比能发现同一个问题的不同解决思路,也能感觉出每个人不同的编程风格,比如虽然都是用C++编写,但有些
人喜欢像C语言一样采用面向过程的写法,而有些人则喜欢采用完全面向对象的方式,以及代码中代码命名方式,构造函数的写法等每个人都会
大同小异。发现除了大量写代码,看他人的代码也是一种很好的学习方法。
还有这次结对编程更对的还是自学能力的体现,比如短信的使用一开始就有很多人出现很多问题,但是通过自己看文档看博客自己摸索,解决
了很多问题,也学到了很多新东西。