软件综合实践专题第二次作业:结对编程

一、 本次作业要求:

小学老师要每周给同学出300道四则运算练习题。

这个程序有很多种实现方式。

C/C++ C#

VB.net

java Excel Unix Shell Emacs

Powershell/Vbscnpt Python

两个运算符100以内的数字,不需要写答案。【估计时间30min】

现在估计写这个程序需要的时间马上把代码写出来需要写答案,并且保证答案在0 ~100之【估计时间2h】

题目避免重复,可扩展性,可定制性

有条件的请马上把程序和运算结果的截屏发到博客上。

二、结对编程成员:1759228与1759216

三、实现代码:java语句

import java.util.Random;

public class Exercise {

  public static void main(String args[]) {

         int k;

         Random rand=new Random();

         for(k=1;k<=300;k++) {

                int a = (int)(Math.random()*100);

                int b = (int)(Math.random()*100);

                if(k%4==1)

                       System.out.println(a+"+"+b+"=");

                else if(k%4==2)

                       System.out.println(a+"-"+b+"=");

                else if(k%4==3)

                       System.out.println(a+"*"+b+"=");

                else

                       System.out.println(a+"/"+b+"=");

         }

  }

}

新的要求

import java.util.Random;

import java.text.DecimalFormat;

import java.util.Scanner;

import java.util.HashSet;

import java.util.ArrayList;

import java.util.List;

import java.lang.String;

public class Exercise {

       public static class MyRandom {                             /*可扩展性*/

           public int getRandom(int min, int max){

               Random random = new Random();

               return random.nextInt( max - min + 1 ) + min;

           }

           public int[] getRandoms(int min, int max, int count){       /*题目避免重复*/

               int[] randoms = new int[count];

               List<Integer> listRandom = new ArrayList<Integer>(); 

               if( count > ( max - min + 1 )){

                   return null;

               }  

               for(int i = min; i <= max; i++){

                   listRandom.add(i);

               }

               for(int i = 0; i < count; i++){

                   int index = getRandom(0, listRandom.size()-1);

                   randoms[i] = listRandom.get(index);

                   listRandom.remove(index);

               }

               return randoms;

           }

       }

  public static void main(String args[]) {

         int k,n,p,q;

         String m,o,r,s,t,u;

         Scanner scan = new Scanner(System.in);

         System.out.println("题目数量为:");              /*可定制(数量,打印方式)*/

         n=scan.nextInt();

         /*具体定制(是否有乘除法,是否有括号,数值范围,加减有无负数

                       除法有无余数,是否支持分数,打印中每行的间隔可调整)*/

         System.out.println("是否有乘除法?(Y/N)");      

      m=scan.next();

      System.out.println("是否有括号?(Y/N)");

      o=scan.next();

      System.out.println("数值范围?(a b)");

      p=scan.nextInt();

      q=scan.nextInt();

      System.out.println("加减有无负数?(Y/N)");

      r=scan.next();

      System.out.println("除法有无余数?(Y/N)");

      s=scan.next();

      System.out.println("是否支持分数?(Y/N)");

      t=scan.next();

      System.out.println("打印中每行的间隔可调整?(Y/N)");

      u=scan.next();

         scan.close();

         DecimalFormat df = new DecimalFormat("0.0");

         MyRandom ran=new MyRandom();

         int a[]=ran.getRandoms(p,q,n);

         int b[]=ran.getRandoms(p,q,n);

         for(k=0;k<n;k++) {

              if(m.equals("Y")) {

                if(k%4==0)

                       System.out.println(a[k]+"+"+"("+b[k]+")"+"=");

                else if(k%4==1) {

                       if(r.equals("Y"))

                           System.out.println(a[k]+"-"+"("+b[k]+")"+"=");

                       else

                              System.out.println(b[k]+"-"+"("+a[k]+")"+"=");

                }

                else if(k%4==2)

                       System.out.println(a[k]+"*"+"("+b[k]+")"+"=");

                else

                       System.out.println(a[k]+"/"+"("+b[k]+")"+"=");

              }

              else {

                     if(k%2==0)

                              System.out.println(a[k]+"+"+"("+b[k]+")"+"=");

                       else{

                              if(r.equals("Y"))

                                  System.out.println(a[k]+"-"+"("+b[k]+")"+"=");

                              else

                                     System.out.println(b[k]+"-"+"("+a[k]+")"+"=");

                       }

              }

         }

四、对结对编程优缺点感受:

优点:

1、能够减少编程过程中产生的错误,在过去,单独编程的时候,常常会出现这样那样的错误,而且常常自己还找不到,通过这次结对编程,感觉编程过程中的出错率明显的减少了。比如:一开始的代码容易出现400道题目有一样的题目的可能,经过我们两个人的讨论,在第二个编程中有效的解决了这个问题。

2、在编程过程中,我们两个人能够进行讨论与学习,每个人的思路都不一样,有些东西我想不到,我队友就能够想到。能够让程序更加的完善。

3、弥补双方的编程盲点,许多我不知道的方法和代码,通过结对编程,我能更深刻的记忆下来,并且感觉比看书记得牢。

4.节约了纠正错误的时间,一出现错误时,队友就能及时的发现并提醒。

缺点:

1、 毫无疑问,我感觉这一次的编程的时间比以往慢了很多,大大的延长了编写代码的时间。

2、 思路有时候会不一样,比如最一开始语言的选定来看,我想用c语言,他想用java,后来经过讨论,用了更为方便的java来编写。

3、 风格略有不同,还好总体一致,没什么大问题。

4、 分散注意力,自己一个人编程的时候注意力更集中,而两个人编程就需要一起想思路,并做交流。

五、编程过程的总体感受以及发生的事情

  在这次的结对编程中学到了很多,从知识方面来说,弥补了我以前学习过程中很多的不足,很多语法没掌握透彻,其次从团队合作方面来说,学到了很多,要和队友进行及时有效的沟通,不然的话两个人的编程体验将会很不好。

  在此次的编程过程中,也发生了一些小事,就像在编写第一个程序的时候,我们俩都没进行深入思考和交流,导致了第一次编程的过程中出现了很多问题,各种bug,不过好在在后来的交流中将这些缺点一一的补足与修正了过来。

   还有就是我发现结对编程得需要长时间的磨合与交流,不然才开始的时候会出现各种的不适应以及出现很多的问题,像我们俩在编程上花的时间就很多。完全没有别的人结对编程时的那种默契感,极大的影响效率。

  与此同时,在编程的时候一定要仔细思考,不然再来一遍的话会很浪费时间。

  我们的结对编程项目实现过程差不多就是这样,过程中遇到了各种各样的问题,尝试着一一解决,总体来说学到了很多很多。这次合作也是从队友那里学到了不少,对我来说合作还是十分愉快的。

猜你喜欢

转载自www.cnblogs.com/zuimenglanting/p/10562221.html