结对第二次作业
1.题目选择及要求
对于本次作业,我先和队友阅读了作业要求,并对这俩道编程题进行了研究,最后一致认为第一题更适合我们。以下是小学四则运算自动生成程序的相关要求:
- 能够自动生成四则运算练习题
- 可以定制题目数量
- 用户可以选择运算符
- 用户设置最大数(如十以内、百以内等)
- 用户选择是否有括号、是否有小数
- 用户选择输出方式(如输出到文件、打印机等)
- 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
2.结对伙伴
队友博客地址:梁恒
我在本次作业中担任驾驶员,以下是我的职责:
- 能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中。
- 能够对导航员在本次编程工作中起到的作用给出客观评价,并完成500字以上的总结。
3.主要代码分析
代码地址 : 小学四则运算自动生成程序
程序流程图:
1.变量定义
int title_number=0;//题目数量
int[] operator={1,1,1,1};//加减乘除四个运算符选择
int maxnum=100;//设置最大数
int has_bracket=0;//选择是否有括号
int has_decimal=0;//是否有小数
int print_way=0;//选择输出方式
2.用户要求输入处理
在这里我以是否有括号进行了说明,其他的处理都类似。
System.out.println("请选择是否有括号:");
System.out.println("1.有 2.没有");
while(1==1)
{
has_bracket=in.nextInt();
if(has_bracket==1)
{
break;
}
else if(has_bracket==2)
{
has_bracket=0;
break;
}
else
System.out.println("输入错误,请重新输入:");
}
3.算式输出
我将算式输出分成了以下四种情况:
- 不含括号且不含小数
- 不含括号且含小数
- 含括号且不含小数
- 含括号且含小数
其中,含括号且含小数的情况最复杂,所以我以这种情况为例解释一下我具体实现的过程。
/*相关函数说明
*float get_random_float(int maxmun) 随机输出一个小于maxmun的浮点数
*int get_random_int(int minmun,int maxmun) 随机输出一个介于minmun和maxmun的正整数
*char get_operator(int[] operator)根据加减乘除运算符数组随机输出一个运算符
*/
int num=get_random_int(2,6);//算式中一共包含的数字总数
int flag=0;//标记括号是否已经输出
int bracket=0;//标记左括号输出概率
int bracket_you=0;//标记右括号输出概率
int decimal=0;//标记小数输出概率
int pre=0;//标记当前应输出数字,还是运算符
while(num!=0)
{
if(pre==0)
{
if(num!=1&&flag==0)
{
bracket=get_random_int(0,10);
if(bracket>8)
{
System.out.print("(");
flag=num;
}
}
decimal=get_random_int(0,4);
if(decimal<3)
System.out.print(get_random_int(1,maxnum));
else
System.out.printf("%.2f",get_random_float(maxnum));
pre=1;
num--;
}
else
{
if(bracket>8&&(flag-num)!=1&&flag!=1000)
{
bracket_you=get_random_int(0,10);
if(bracket_you<6)
{
System.out.print(")");
flag=1000;
}
}
System.out.print(get_operator(operator));
pre=0;
}
}
//如果数字已经输出完毕,判断右括号是否已经输出过
if(flag!=1000&&bracket>8)
System.out.print(")");
System.out.print("="+"\n");
4.程序运行结果
1)输出到屏幕
2)输出到文件
5.程序综述
这个程序已经实现了题目的所有要求,能够自动生成指定要求的四则运算练习题,但美中不足的地方是没有图形界面。
4.导航员工作评价
此次结对编程,我担任的是驾驶员,我的partner梁恒担任的是领航员的角色。通过此次小学四则运算自动生成程序的例子,经过实战吧算是,我认为结对编程既有好处也有不足之处。好处在于编程的时候我们也就在复审,这样能够降低我们程序出错的概率,提高代码质量,两个人相互讨论,互相合作,会对问题分析的更透彻,对问题有更好的解决能力。比如在此次小学四则运算自动生成程序的例子中,我在写随机生成整数的函数中,没有对输入的俩个参数进行大小比较,忽略了为零的情况,但是梁恒正好在做这个函数的代码测试中发现了这个小问题,我就及时的改正过来。如果这是我一个人在编程的话,把这种小问题忽略掉,而且程序还是有bug,我可能要花出好长的时间来找这个bug,可能很长时间也找不出来,还要去请教别人。所以结对编程时我们可以节省一些寻找bug的时间,关键函数还是要再测试的。而且结对编程时,我感觉两个人在一起的话编程的效率也比一个人编程时要高,队友比较有激情,所以在这方面他激励着我,编程效率更高,节奏更快,没有在一个小问题上浪费更多的时间。不过任何事物都是有两面性的,结对编程同样也不例外,它也是存在着一些问题的。对于我们来说,我觉得在时间上有问题。结对编程需要找我们都有空的时候,除去正常的上课时间,我还报了校内的考研班,他报了校外的考研班,我们时间冲突着还(这就贼气),而且我们每个人还都有自己的事情,找一个两个人都有空的时间编程不是很简单啊,还好我们是舍友,所以很快度过磨合阶段,利用晚上的时间在一起讨论,编程。总的来说,这次的结对编程对我们来说还是有新鲜感的,相信未来的结对编程我们会更加默契,加油!
最后附上合照一张: