结对第二次作业

1.题目选择及要求

  软件工程(2018)结对编程第二次作业

  对于本次作业,我先和队友阅读了作业要求,并对这俩道编程题进行了研究,最后一致认为第一题更适合我们。以下是小学四则运算自动生成程序的相关要求:

  • 能够自动生成四则运算练习题
  • 可以定制题目数量
  • 用户可以选择运算符
  • 用户设置最大数(如十以内、百以内等)
  • 用户选择是否有括号、是否有小数
  • 用户选择输出方式(如输出到文件、打印机等)
  • 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

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

最后附上合照一张:

猜你喜欢

转载自www.cnblogs.com/haozhirong/p/8855827.html