20162316_20162328结对编程第二周阶段总结

Java结对编程四则运算第二周总结

结对编程项目码云链接

需求分析

  • 题目随机出现并具有多种格式。
  • 既有整数又有分数的计算。
  • 判断对错并统计正确率。
  • 分辨除法的“/”与分数的“/”。
  • 给出当前所做的题目数量。

设计思路(双栈)

  • 这周和上次的代码比起来变了很多,由于栈的加入使许多内容需要更新一下。
  • 主函数是Questions,在主函数中用random和switch来随机选择是整数算数式还是分数式;
  • Intquestions,这个类用来随机出现一个计算式
  • InToPost,这个类是将输入的中缀表达式转换成后缀表达式。
  • PostfixEvaluator,这是用来计算后缀式的类。

实验过程中的关键代码解释

  • 1.根据需要输出不停个数的式子。
  • 2.Questions.java中,随机出现整数式,并调用相关的类。
  • 3.这个类在在编写时还写了一个能够显示出压栈出栈的过程的功能,但后来觉得和老师的要求无关,显示出来太累赘,于是在调用时并没有调用这个功能。另外,Stack在这个类中的存在很重要。

public class InToPost {
private Stack theStack;
private String input;
private String output = "";
public InToPost(String in) {
input = in;
int stackSize = input.length();
theStack = new Stack(stackSize);
}
public String doTrans() {
for (int j = 0; j < input.length(); j++) {
char ch = input.charAt(j);
switch (ch) {
case '+':
case '-':
gotOper(ch, 1);
break;
case '*':
case '/':
gotOper(ch, 2);
break;
case '(':
theStack.push(ch);
break;
case ')':
gotParen(ch);
break;
default:
output = output + ch;
break;
}
}
while (!theStack.isEmpty()) {
output = output + theStack.pop();
}
return output;
}
public void gotOper(char opThis, int prec1) {
while (!theStack.isEmpty()) {
char opTop = theStack.pop();
if (opTop == '(') {
theStack.push(opTop);
break;
}
else {
int prec2;
if (opTop == '+' || opTop == '-')
prec2 = 1;
else
prec2 = 2;
if (prec2 < prec1) {
theStack.push(opTop);
break;
}
else
output = output + opTop;
}
}
theStack.push(opThis);
}
public void gotParen(char ch){
while (!theStack.isEmpty()) {
char chx = theStack.pop();
if (chx == '(')
break;
else
output = output + chx;
}
}

    class Stack {
    private int maxSize;
    private char[] stackArray;
    private int top;
    public Stack(int max) {
        maxSize = max;
        stackArray = new char[maxSize];
        top = -1;
    }
    public void push(char j) {
        stackArray[++top] = j;
    }
    public char pop() {
        return stackArray[top--];
    }
    public char peek() {
        return stackArray[top];
    }
    public boolean isEmpty() {
        return (top == -1);
    }
}

}

  • 4.这个类专门用来随机出现整数式子,用了Random。
  • 5.在postfixEvaluator.java中,这里用来算出扫描进的内容,简单但不可或缺。
  • 6.统计正确数,计算正确率

困难

在过程中最大的困难是在这个地方:

在我检查程序时候是发现没有程序的错误的,但是只要整式的计算式,就会出现异常。
后来发现是因为postfixEvaluator.java在读取后缀式的时候必须要求每个char之间都有一个空格。比如:22+10转成后缀若是没有空格就会是:2210+,就不能确定到底是2加210还是什么。
在我加了空格之后就解决了问题。

还有个意外是把一个类名字输入成了Integer.java,带来的结果是许多程序都不能运行了。

总结

我的结对伙伴是20162328蔡文琛,我们之前的java基础都不算很牢固,所以这次的编程任务对我们来说是个巩固自己知识的好时机,而庆幸的是我们抓住了这个机会并完成了它,它让我们收获颇多,这次的编程任务让我们感到很强的成就感。

我们在编程过程中,没有明确的角色分配诸如“键盘手”和“领航员”,而是我们划分好了各自的任务,明确需要做的事,不做白费功夫的事。我们在编程过程中时时交流,以保证我们的程序能够相互交融不发生冲突。

美中不足的是我们由于总是分开在自己的项目中编程,在QQ相互发送代码,完成以后才git push,所以提交过程不够精细。

PSP

PSP2.1 Personal Softwore Process Stage 预计耗时(分钟) 实际耗时(分钟)) 重要成长
Planning 计划 40 60
Estimate 做这个任务需要多长时间 360 240
Development 开发 30 30
Analysis 需求分析(包括学习新技术) 30 35
Design Spec 生成设计文档 60 40
Design Review 设计复审(和同事审核设计软件) 40 20
Coding Standard 代码规范 (为目前的开发制定合适的规范) 120 180
Design 具体设计 120 100
Coding 具体编码 100 120
Code Review 代码复审 30 15
Test 测试(自我测试,修改代码,提交修改) 20 15
Reporting 报告 30 40
Test Report 测试报告 40 50
Size Measurement 计算工作量 10 20
Postmortem & Process Improvement Plan 30 10
posted @ 2017-05-21 23:46  20162316刘诚昊  阅读(178)  评论(2编辑  收藏  举报