一、 本次作业要求:
小学老师要每周给同学出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,不过好在在后来的交流中将这些缺点一一的补足与修正了过来。
还有就是我发现结对编程得需要长时间的磨合与交流,不然才开始的时候会出现各种的不适应以及出现很多的问题,像我们俩在编程上花的时间就很多。完全没有别的人结对编程时的那种默契感,极大的影响效率。
与此同时,在编程的时候一定要仔细思考,不然再来一遍的话会很浪费时间。
我们的结对编程项目实现过程差不多就是这样,过程中遇到了各种各样的问题,尝试着一一解决,总体来说学到了很多很多。这次合作也是从队友那里学到了不少,对我来说合作还是十分愉快的。