20162317-20162315结对编程-四则运算(挑战出题)
20162317-20162315结对编程-四则运算(挑战出题)
-
四则运算
需求分析
- 实现个位数整数的去重出题,并要求在命令行参数形式指定题目要求。
设计思路
- 有了上两次的四则运算基础后,这次的题目比较容易上手,再加上是个位数整数的四则运算,因此也更为简单。
- 根据我和20162315马军的探讨,我们决定依然采用先前的办法,将题目设立在一个数组中,奇数位放置运算符号,偶数位放置操作数,用参数为9的随机数再加上1来实现操作数为1~9的需求,最后一位放置等于号。然后将数组输出至"expression.txt"的文件中。
- 关于在以命令行参数实现对题目的要求直接写一个类来实现其他方法类,并将参数设定为args数组中的特定位置的元素。
遭遇问题
- 去重
在多番上网查询无果后,我与结队伙伴决定用最没办法的办法,通过将得数相等的算式筛去,以此来去重。
要想得到结果,就要对算式进行计算,而根据先前两次的经验,计算的方法就是将中缀表达式转化为后缀表达式,然后来进行计算。
题目的转换:
Stack<String> sta;
//转换为后缀表达式
sta = new Stack<String>();
for (int n = 0; n < middle.length - 1; n++) {
//符号优先级高的
if (isOperatorFirst(middle[n])) {
sta.push(middle[n]);
}
//符号优先级低的
else if (isOperatorLatter(middle[n])) {
//若栈空,则入栈
if (sta.empty()) {
sta.push(middle[n]);
}
//若栈不空,栈中符号全部弹出
else {
while (!sta.empty()){
fw2.append(sta.pop() + " ");
}
sta.push(middle[n]);
}
}
//数字直接输出
else {
fw2.append(middle[n]+" ");
}
}
while (!sta.empty()){
fw2.append(sta.pop()+ " ");
}
fw2.append("\r\n");
fw2.flush();
private boolean isOperatorLatter(String token){
return (token.equals("+")||token.equals("-"));
}
private boolean isOperatorFirst(String token){
return (token.equals("*")||token.equals("/"));
}
//写入是为了在另一个类中读取后缀表达式并进行计算,此处不突出介绍。
最多题目:
结队互评:
马军同学虽然编写代码的能力水平可能比我稍差一筹,但他的规划能力和对代码方法实现的思考比我要更好一点,我们一起编程时他能及时提出修改的建议,使我们少走了一些弯路。我协助他完成了不带有小括号部分的一些代码,希望他能平时能多多练习,努力提升自己编写代码的能力。如果评分总分是100分,我给我自己65分,给他35分。
UML类图
Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
计划 | 20 | 30 |
·估计耗时 | 20 | 30 |
开发 | 435 | 525 |
·需求分析 | 30 | 20 |
·生成设计文档 | 15 | 20 |
·具体设计 | 50 | 40 |
·具体编码 | 120 | 150 |
·代码复审 | 30 | 60 |
·测试 | 10 | 20 |
报告 | 60 | 90· |
测试报告 | 50 | 80 |
·事后总结,并提出过程改进计划 | 35 | 20 |
·分析下一步计划 | 20 | 10 |
合计 | 460 | 675 |
结队伙伴:
马军20162315