软件工程网络15结对编程1——四则运算优化
1.链接
- 学号:201521123076 博客链接:http://www.cnblogs.com/slickghost/p/8645842.html
- 学号:201521123078 博客链接:http://www.cnblogs.com/onetruck/p/8641053.html
- 结对编程码云项目链接:https://gitee.com/534160110/Arithmetic
2.改进现有代码
一、分析初始代码
类图

覆盖率统计




单元测试



所发现的不足之处
- 类没有注释,减少易读性
- 源程序中使用驼峰命名法,但是一些方法的命名有缺陷,如Fraction类中的creatfraction(),应改为createFraction()
- 不能让用户选择题目的数量
- 没有统计正确率
- 只有两个数之间的运算
二、功能改进与扩展
-
为每个类增加注释,修改不恰当的命名
![]()
-
重构Calculator类,增加calc()方法
//Class Calculator
public static String calc(String op,Fraction a,Fraction b){
switch (op) {
case "+":
System.out.println("+");
return add(a,b);
case "-":
return sub(a,b);
case "×":
return mul(a,b);
case "÷":
return div(a,b);
default :
return null;
}
} -
扩展了三位数之间的运算
public static String createRandomOp(){
String operator = null;
Random random = new Random();
switch (random.nextInt(4)) {
case 0:
operator = "+";
break;
case 1:
operator = "-";
break;
case 2:
operator = "×";
break;
case 3:
operator = "÷";
break;
}
return operator;
}public class Createformula {
public static int testNum = 5;
private String[] result = new String[testNum];
private String[] number_1 = new String[testNum];
private String[] number_2 = new String[testNum];
private String[] number_3 = new String[testNum];
private String[] operator1 = new String[testNum];
private String[] operator2 = new String[testNum];
private ArrayListscoresList = new ArrayList ();
private BufferedWriter writer;public Createformula() {
}
public void createTest() {
Random random = new Random();
Fraction f1 = new Fraction();
Fraction f2 = new Fraction();
Fraction f3 = new Fraction();
for (int i = 0; i < testNum; i++) {
f1.creatfraction();
f2.creatfraction();
f3.creatfraction();
number_1[i] = f1.getFraction();
number_2[i] = f2.getFraction();
number_3[i] = f3.getFraction();
operator1[i] = createRandomOp();
operator2[i] = createRandomOp();
Fraction temp = new Fraction(); //put the result of f1f2
if(operator1[i].equals("+")||operator1[i].equals("-") ){
temp.setFraction(Calculator.calc(operator2[i],f2,f3));
temp.convertResult();
result[i] = Calculator.calc(operator1[i],f1,temp);
}
else{
temp.setFraction(Calculator.calc(operator1[i],f1,f2));
temp.convertResult();
result[i] = Calculator.calc(operator2[i],temp,f3);
}
}
}//Class Fraction
public void convertResult(){
if(fraction != null){
if(fraction.contains("/")){
String str[] = fraction.split("/");
this.numerator = Integer.parseInt(str[0]);
this.denominator = Integer.parseInt(str[1]);
}
else{
this.numerator = Integer.parseInt(fraction);
this.denominator = 1;
}
}
else System.out.println("fraction null");
} -
增加用户选择题目数量功能
//Class Background
public void setFormulaNum() {
String str;
str = JOptionPane.showInputDialog("请输入题目数量");
this.formulaNum = Integer.parseInt(str);
} -
增加正确率统计功能
//Class Background
public void actionPerformed(ActionEvent e) {
btnExit.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
System.exit(0);
}
});btnSubmit.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
isEnd=!isEnd;
for (int i = 0; i < formulaNum; i++) {
answers[i]=tfdAnswer[i].getText();
}
wrong= background.checkAnswer(answers);
String s=null;
if(wrong.length==0)
s=tips.get(5);
else{
s=tips.get(6)+"\n";
String standardAnswer[]=new String[formulaNum];
standardAnswer=background.getStandardAnswer();
questions = background.getQuestions();
for(int i=0;i<wrong.length;i++){
s=s+questions[new Integer(wrong[i])-1]+standardAnswer[new Integer(wrong[i])-1];
s=s+"\n\n\n";
}
s = s + tips.get(7)+
String.valueOf(background.getRightAnswer()*100/background.testNum) +"%";
}JOptionPane.showMessageDialog(null, s, "错题",JOptionPane.PLAIN_MESSAGE);;
}});
-
运行结果截图:
![]()



3.两人合作
一、编码规范
- 1.使用驼峰命名法
- 2.缩进:tab
- 3.类的开头注释
二、结对照片


三、码云提交记录

四、心得体会
结对编程确实能够带来1+1>2的效果,两个人互相讨论后各司其职,其中遇到问题互相帮助。


浙公网安备 33010602011771号