结对编程项目的过程记录与收获
1、编程问题
某公司程序员二柱的小孩上了小学二年级,老师让家长每天出100道(100以内)四则运算题目给小学生做。
2、结对编程的出发点
为了体会结对编程的好处,和同伴一起相互学习,相互监督,相互促进,共同提高。
结队编程对象:高莉萍
对方博客地址:http://www.cnblogs.com/gAoliping/p/5377584.html
双方贡献比例:1:1
3、编程细节
(1)采用语言:java
(2)主要类:CheckClass(负责合法性检查)、ArithmeticTest(给出问题的答案)、Tester(结果输出)
(3)主要代码:
1)、CheckClass
package textFactory;
/**
* @function 检查合法性
* @author zy
*
*/
public class CheckClass {
/**
* @function 检查一个(int)数字是否符合要求
* @param firstNum
* @param maxNum
* @param minNum
* @return
*/
public static boolean checkNumIsOkOrNot(int Num, int maxNum, int minNum) {
boolean result = false;
if (Num >= minNum && Num <= maxNum) {
result = true;
} else {
result = false;
}
return result;
}// end
/**
* @function 检查一个(double)数字是否符合要求
* @param Num
* @param maxNum
* @param minNum
* @return
*/
public static boolean checkNumIsOkOrNot(double Num, int maxNum, int minNum) {
boolean result = false;
if (Num >= minNum && Num <= maxNum) {
result = true;
} else {
result = false;
}
return result;
}// end
/**
* @function 检查一个字符串是否为整数
* @param value
* @return
*/
public static boolean isInteger(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}// end
/**
* @function检查运试算是否符合要求
* @param firstNum
* @param secondNum
* @param maxNum
* @param minNum
* @param answer
* @param symbol
* @return
*/
public static boolean checkTheTestIsOkOrNot(int firstNum, int secondNum,
int maxNum, int minNum, double answer, char symbol) {
boolean result = false;
switch (symbol) {
case '+':
if (checkNumIsOkOrNot(answer, maxNum, minNum)) {
result = true;
} else {
result = false;
}// end if
break;
case '-':
if (answer >= 0) {
result = true;
} else {
result = false;
}
break;
case '*':
if (checkNumIsOkOrNot(answer, maxNum, minNum)) {
result = true;
} else {
result = false;
}// end if
break;
case '/':
if (isInteger(String.valueOf(answer))) {
result = true;
} else {
result = false;
}// end if
break;
default:
break;
}// end switch
return result;
}// end
}// end class
2)、ArithmeticTest
package textFactory;
import java.util.ArrayList;
import java.util.Random;
public class ArithmeticTest {
int fistNum;
int seconeNum;
double answer;
char symbol;
ArrayList calcultorSymbol = new ArrayList();
public ArithmeticTest() {
// TODO Auto-generated constructor stub
}// end
public ArithmeticTest(int fistNum, int seconeNum) {
this.fistNum = fistNum;
this.seconeNum = seconeNum;
}// end
public ArithmeticTest(int fistNum, int seconeNum, ArrayList calcultorSymbol) {
super();
this.fistNum = fistNum;
this.seconeNum = seconeNum;
this.calcultorSymbol = calcultorSymbol;
}// end
/**
* @function 获取小于 i 的随机数
* @param i
* @return
*/
public static int getRandomNum(int i) {
Random random = new Random();
int resNum;
resNum = random.nextInt(i);
return resNum;
}// end
/**
* @function 随机获取一个运算符号
* @return
*/
public char getSymbol() {
char symbol = '@';
int index = getRandomNum(this.calcultorSymbol.size());
symbol = (char) this.calcultorSymbol.get(index);
return symbol;
}// end
/**
* @function进行四则运算(无括号)
* @param firstNum
* @param secondNum
* @param symbol
*/
public void calcAnswer(int firstNum, int secondNum) {
this.symbol = getSymbol();
switch (symbol) {
case '+':
this.answer = firstNum + secondNum;
break;
case '-':
this.answer = firstNum - secondNum;
break;
case '*':
this.answer = firstNum * secondNum;
break;
case '/':
this.answer = firstNum / secondNum;
break;
default:
break;
}// end switch
}// end
@Override
public String toString() {
// TODO Auto-generated method stub
String resultTest = fistNum + " " + this.symbol + " " + seconeNum
+ " =";
return resultTest;
}// end
}// end class
3)、Tester
package textFactory;
import java.util.ArrayList;
import org.omg.CORBA.TIMEOUT;
import staticProperty.StaticPropertyStudy;
/**
* 算式测试与输出
*
* @author zy
*
*/
public class Tester {
public static void main(String[] args) {
int testNum = 30;
int maxNum = 101;
int minNum = 0;
int firstNum;
int secondNum;
/*
* 建立操作符列表
*/
ArrayList symbolList = new ArrayList();
symbolList.add('+');
symbolList.add('-');
symbolList.add('*');
symbolList.add('/');
for (int i = 1; i <= testNum; i++) {
boolean checkResult = true;
while (checkResult) {
ArithmeticTest arithmeticTest = null;
firstNum = ArithmeticTest.getRandomNum(maxNum);
secondNum = ArithmeticTest.getRandomNum(maxNum);
// 创建一个运算式对象
arithmeticTest = new ArithmeticTest(firstNum, secondNum,
symbolList);
arithmeticTest.calcAnswer(arithmeticTest.fistNum,
arithmeticTest.seconeNum);
checkResult = CheckClass.checkTheTestIsOkOrNot(firstNum,
secondNum, maxNum, minNum, arithmeticTest.answer,
arithmeticTest.symbol);
if (checkResult) {
System.out.print("第 " + i + " 题: ");
System.out.println(arithmeticTest);
// System.out.println("答案是 --- >" + arithmeticTest.answer);
System.out.println();
checkResult = false;
} else {
checkResult = true;
}// end if
}// end while
}// end for
}// end main
}// end class
(4)运行效果截图
1)、没有答案的输出
2)、有答案的输出
(5)结对编程照片展示
4、项目总结
1)结对编程能够比较有效促进程序员的工作进度;
2)编程过程中错误率明显降低;
3)在编程过程中相互都能得到促进;
4)在有分歧的时候,比较花费时间和精力。