您的位置:首页 > 编程语言

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

2017-05-21 23:46 295 查看

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.1Personal Softwore Process Stage预计耗时(分钟)实际耗时(分钟))重要成长
Planning计划4060
Estimate做这个任务需要多长时间360240
Development开发3030
Analysis需求分析(包括学习新技术)3035
Design Spec生成设计文档6040
Design Review设计复审(和同事审核设计软件)4020
Coding Standard代码规范 (为目前的开发制定合适的规范)120180
Design具体设计120100
Coding具体编码100120
Code Review代码复审3015
Test测试(自我测试,修改代码,提交修改)2015
Reporting报告3040
Test Report测试报告4050
Size Measurement计算工作量1020
Postmortem & Process Improvement Plan3010
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: