一,Github地址:https://github.com/lq15086495788/lq
结对成员;林德泽3117004620,李清3117004615
二:psp表格:
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 |
30 |
· Estimate |
· 估计这个任务需要多少时间 |
1310 |
1460 |
Development |
开发 |
120 |
120 |
· Analysis |
· 需求分析 (包括学习新技术) |
70 |
80 |
· Design Spec |
· 生成设计文档 |
50 |
70 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 |
40 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
100 |
90 |
· Design |
· 具体设计 |
800 |
900 |
· Coding |
· 具体编码 |
60 |
80 |
· Code Review |
· 代码复审 |
100 |
100 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
130 |
150 |
Reporting |
报告 |
60 |
80 |
· Test Report |
· 测试报告 |
30 |
30 |
· Size Measurement |
· 计算工作量 |
40 |
40 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
10 |
20 |
合计 |
|
1490 |
1660 |
三,效能分析
最开始想要封装几个类分别实现产生运算式,保存运算式,保存实现输入的结果和最后产生并比对正确答案的几个类但是反而在main调用时候出现混乱,项目停滞,后来改使用单类完成但是
感觉写的程序比较复杂,所有的功能在一个循环里完成了。感觉好多地方还可以封装一下,这样代码也会比较美观。
感觉自己变量用的太多了,有点冗余。还有个问题.
应该再进行改进改进。应该将代码重新封装,优化了一下,界面上更加美观,而且也没有了那么多冗余的变量。每个要实现的功能都在各自的方法里实现的。main方法里实现的功能就是单纯调用方法,输入输出的功能。
四,设计实现过程
1.我们首先想到的是整数化分数的运算,再对分子分母进行化简,我们试图生成两个分子和两个分母(分母至少一个为零时则全置为1,从而达到生成整数而用分数去运算的效果)来实现让整数和分数的计算可以同步。
2.对分数(不论是结果还是题目)进行判断,是假分数则化为带分数的形式,是真分数保持不变。
3.通过对不同文件的操作输出题目,答案以及统计答题者情况。
4.程序需求中的查重功能没有实现。
五,代码说明
main方法部分代码;
public static void main(String[] args){ Scanner sc= new Scanner(System.in); System.out.println("请输入产生几以内的数字:"); range=sc.nextInt(); System.out.println("请输入产生多少个运算表达式:"); int num=sc.nextInt(); int rightcount[]=new int[num+2]; int wrongcount[]=new int[num+2]; int right1=0; int wrong1=0; String[] results=new String[num];int i; for( i=0;i<num;i++){ String expArr[]=new String[2];//定义生成的题目 int a= (int) (random.nextInt(range));//分子 int b= (int) (random.nextInt(range));//分母 int c= (int) (random.nextInt(range));//另一个分子 int d= (int) (random.nextInt(range));//另一个分母 int fuhao;//运算符 fuhao= (int) (random.nextInt(4)); if(b!=0&&d!=0) {//分母均不为0时生成带有分数的计算题,同时计算结果 if(fuhao==0) { int fenzi=a*d+b*c; int fenmu=b*d; expArr[0]=biaodashi(a,b)+'+'+biaodashi(c,d)+'='; System.out.println(expArr[0]); results[i]=reductionofFraction(fenzi, fenmu); }
reductionofFraction方法用于分数约分,用于计算结果
public static String reductionofFraction(int a, int b) { int y = 1; for (int i = a; i >= 1; i--) { if (a % i == 0 && b % i == 0) { y = i; break; } } int z = a / y;// 分子 int m = b / y;// 分母 if (z == 0) { return "0"; } if(m==1) return z+""; else return biaodashi(z,m); }
biaodashi方法用于判断假分数,并化假分数为带分数
public static String biaodashi(int a,int b) { if(a>=b) { int c; c=a/b; int d; d=a%b; {if(d==0) {return c+"";} return c+"'"+d+"/"+b;} }return a+"/"+b; }
六,测试运行
1,输入 5和5希望测试得到五个5以内的四则运算式并输入结果输入ok确认,
2.得到题目文件
3.答案文件
4.输入的答案的文件
5.答案比对结果的文件
七,项目小结
1.每道题目中出现的运算符个数我们只实现了单个运算符,当我们后来试图扩展多个运算符的时候发现时间不够了,因此只能上交较为简单的版本。
2.查重功能以我们的算法和我们的能力感觉实现有难度,所以并不在我们的计划中。
3.遇到的困难主要是数组越界,通过严谨的检查以及步步验证的方式找出了错误并解决了。另一个须待解决的问题是生成题目的速度有些缓慢,因此完善了多次的算法来提高代码的执行效率。
4.总的来说,在结对编程中我们有各自的想法,通过代码的形式来进行人与人之间的交流不失为一种好的方法,在这个过程中我们培养了团队协作的能力和与他人交际的能力,同时也促使自身的编程能力不断提高,这使我们都受益匪浅。当然如果还有机会的话,我还是希望可以实现带括号的运算式的生成以及答案的计算。