首页 > 代码库 > 第一周个人项目总结
第一周个人项目总结
第一周完成了编写一个生成小学生算数题目的个人小项目,难度不算高,但是细节上值得注意的地方还是很多。
计划估计上:
刚看到题目的时候觉得思路上不难,生成随机数即能解决问题,存在分数的情况可以另写一个类表示生成的数的形式来处理。估计时间花费为两个小时(果然还是太年轻了。。。)
代码因为是用JAVA写,可能会比较长,估计两三百行就能解决。
实际代码上:
真正上手来写的时候发现难点主要在如何生成表达式方面,因为生成完表达式后必须同时计算出正确结果。联想到以前写过给出表达式计算结果的小程序,但是觉得用生成的句子再带入计算结果不是不可以,但是觉得一是有点绕了个圈子,二是不想复用以前的代码。然后想到可以再生成算式的同时计算结果,同时可以有两种生成选择,每次新生成的数字有同等概率出现在已生成的等式的左边或右边,同时有个问题就是如何保证括号不会多打(也就是第一个数如何标记以至于在*或/的时候不会被加括号,这里用了一个j表示第几个数,在加括号是判断一下是否为第一个数),分数加括号是为了表示是分数。然后递归生成算式,从最上层先递归到最后一个数生成后再返回生成上层的数。将分数和整数封装在了一起,整数的分母即为1,然后用函数写了运算的函数(这里也可以重载运算符,这样代码看起来更直观和简练)
性能上:
其实代码整个基本框架写完还是很快的,主要是不断地调试,增加细节,比如如何处理错误输入,然后答案是否支持小数之类的,在经过漫长(和写框架一样长的时间。。)的测试和调优后,最后确定了可以支持小数,精度在1e-5之内即可,也支持未化简的分数,然后整数也可按照分数形势给出,省略分母1保留/的答案也被认为是正确的。测试结果是否正确时,为了让结果好算一点(囧),将数据范围和算式长度调小了,如果要复杂可以改相应变量的数值即可,也可提供接口让用户自己设置,如果要不断完善的话。同时对每次答题情况进行了记录,也可自行指定记录的文件。
感想:
掌握了主要思想后写出来并不难,就是在写的过程中很多细节方面要注意,比较耗时间。而且后期不断调试性能上,总觉得有很多东西可以加上去,完善功能的,但是感觉要适可而止,因为是无止尽的,能保证基本的需求,适当增加特殊性能即可,没有必要过度。
第一周个人项目总结