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的时间,关键函数还是要再测试的。而且结对编程时,我感觉两个人在一起的话编程的效率也比一个人编程时要高,队友比较有激情,所以在这方面他激励着我,编程效率更高,节奏更快,没有在一个小问题上浪费更多的时间。不过任何事物都是有两面性的,结对编程同样也不例外,它也是存在着一些问题的。对于我们来说,我觉得在时间上有问题。结对编程需要找我们都有空的时候,除去正常的上课时间,我还报了校内的考研班,他报了校外的考研班,我们时间冲突着还(这就贼气),而且我们每个人还都有自己的事情,找一个两个人都有空的时间编程不是很简单啊,还好我们是舍友,所以很快度过磨合阶段,利用晚上的时间在一起讨论,编程。总的来说,这次的结对编程对我们来说还是有新鲜感的,相信未来的结对编程我们会更加默契,加油!
最后附上合照一张: