一、实验目标
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容
1.代码规范
(1)函数定义
函数名定义简洁明了,能够清晰表达其功能,对应各个模块的功能函数要加上对应的注释,以便后续的修改。
(2)代码编排
缩进采用编辑器默认缩进;一行的最长代码不超过电脑一个屏幕可显示的范围;实现不同功能的代码块之间要以空格隔开。
(3)空格和空行
实现程序功能的代码里不要使用过多没有意义的空格,控制打印输出时考虑空格控制输出格式;空行用于分隔用于实现不同功能模块的代码段。
(4)注释
实现各个功能的函数需要加上对应注释;部分不易理解的变量或者算法流程加上对应注释,方便理解代码;不用滥用注释,进行无意义注释。
(5)命名规范
常量,变量,函数的命名要简短且表意清晰,对于多个单词构成的命名中间用_分隔。
2.程序之间的总体关系
程序模块分为 题目产生模块,题目校验模块 ,答案校验模块,评分模块。
题目产生模块用于产生简单的无要求的四则原算式,用于出题使用。
题目校验模块用于校验随机产生的问题是否符合题目要求,符合要求就将题目打印出来,不符合要求则重新产生。
答案校验模块用于输入用户的回答并与标准答案进行校验,并提示对错。
评分模块用户计算用户的总体正确率,来进行学习结果估算。
3.结对编程过程以及功能实现情况:
两人交替实现各个模块
1)题目产生模块
int r=random.nextInt(4)+1;
switch (r) {
case 1:
int left1=random.nextInt(101);
int right1=random.nextInt(101);
System.out.println(left1+"+"+right1+"=");
answer=left1+right1;
break;
case 2:
int left2=random.nextInt(101);
int right2=random.nextInt(101);
System.out.println(left2+"-"+right2+"=");
answer=left2-right2;
break;
case 3:
int left3=random.nextInt(101);
int right3=random.nextInt(101);
System.out.println(left3+"*"+right3+"=");
answer=left3*right3;
break;
case 4:
int left4=random.nextInt(101);
int right4=random.nextInt(101);
System.out.println(left4+"/"+right4+"=");
success=left4%right4;
answer=left4/right4;
break;
}
此模块由滕磊同学完成,进行整体设计,开始时考虑用if-else函数或者switch函数,最后为了简洁明了,决定以[0,5)之间产生的随机数为依据选择加减乘除四则运算,然后产生对应的四则运算式并将其打印出来,由于后续校验的4个式子要求不同,此处每次产生式子时产生新的随机数而非运用旧的统一的随机数.
打印结果如下:
2)题目校验模块
此处仅以一个case为例
int r=random.nextInt(4)+1;
switch (r) {
case 1:
do{
int left1=random.nextInt(101);
int right1=random.nextInt(101);
left=left1;
right=right1;
answer=left+right;
}while(answer>100);
System.out.println(left+"+"+right+"=");
break;
}
此模块由谢林林同学优化完成,开始是由于之前并未进行规范产生式,内部打印导致产生了多个不符产生式,讨论决定使用2个全局变量left和right分别保存最新生成的规范随机数,并将其生成的随机四则运算式打印出来
打印结果如下:
3)
此处仅以一个case为例
case 1:
do{
int left1=random.nextInt(101);
int right1=random.nextInt(101);
left=left1;
right=right1;
answer=left+right;
}while(answer>100);
System.out.println(left+"+"+right+"=");
System.out.println("请回答:");
int u_answer1=scanner.nextInt();
if(u_answer1==answer)
System.out.println("答案正确");
else
System.out.println("答案错误");
break;
开始时是一次性打印全部题目,然后填入答案存储并校对结果,题目要求一边打印一边答题,讨论后对于每一个产生的随机四则运算之后向用户征求答案,并进行校对,提示对错。
打印结果如下:
4)评分模块
此处仅以一个case为例
case 1:
do{
int left1=random.nextInt(101);
int right1=random.nextInt(101);
left=left1;
right=right1;
answer=left+right;
}while(answer>100);
System.out.println(left+"+"+right+"=");
System.out.println("请回答:");
int u_answer1=scanner.nextInt();
if(u_answer1==answer)
{
System.out.println("答案正确");
t_answer++;
}
else
System.out.println("答案错误");
break;
System.out.println("您的得分是"+t_answer*100/p_number);
在校验答案的时候,如果答案正确就使正确题数+1,最后全部题目答题完毕之后用正确的题数除以总题数计算得分率转化为总得分.
打印结果如下
4.项目github地址
https://github.com/rezero0523/sizeyunsuan_jiedui
5.实验小结
1)了解了结对编程和敏捷开发的基本知识,熟悉了敏捷开发的迭代模型开发方法和结对编程的具体流程.
2)了解了github在代码开发共同协作中的实际应用,能够简单的运用github来进行版本的管理存储和协同开发.
3)重新熟悉java环境下rand函数的使用,以及类及其方法与模块复用程度之间的设计考量,减少代码冗余度.