需求分析

  • 实现去重出题,并以命令行参数形式指定题目要求。

设计思路

  • 具体的思路:

  • 思路一:

    原本我和春旺商量通过集合中的元素的不重复性进行去重。但是运算符多也导致重复的数字多,去重的数量也大大增多越到后面效率越低,6000以后时间已经难以接受了,所以放弃了这种方法。

  • 思路二:

    后来我们向其他组的同学询问,发现通过结果相同且去重比较好,运算符多反而重复性降低,效率也就高了。

UML类图

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

public class Return {
private Stack<String> stack1;
private List<String> list1;
private String message; public Return() {
stack1 = new Stack<String>();
list1 = new ArrayList<String>();
} //后缀表达式的转换方法
public void evaluate(String expr) {
String Message="";
String token;
StringTokenizer tokenizer = new StringTokenizer(expr); while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken(); if (token.equals("("))
stack1.push(token);
else if (token.equals("+") || token.equals("-")) {
while (!stack1.empty()){
if(stack1.peek().equals("(")){
break;
}else list1.add(stack1.pop());
}
stack1.push(token);
}else if (token.equals("*") || token.equals("/")) {
if(!stack1.empty()) {
if (stack1.peek().equals("*") || stack1.peek().equals("/")) {
list1.add(stack1.pop());
stack1.push(token);
} else stack1.push(token);
}else stack1.push(token);
}
else if (token.equals(")")) {
while (!stack1.peek().equals("(")) {
list1.add(stack1.pop());
}
stack1.pop();
}else list1.add(token);
}
while (!stack1.empty()) {
list1.add(stack1.pop());
}
for(String i:list1)
Message += i+" ";
list1.clear();
message = Message;
} //返回转换后的结果
public String getMessage(){
return message;
}
}

中缀转后缀

运行过程截图

  • 几个运行的结果

测试

代码托管地址

  • 我们结对编程原本有个jieduibiancheng2的共同项目,但是不能在其中运行,要运行的是不在文件夹下的ExpressionGenerator 类,我们的结对编程的项目在最后的时候克隆在本地有点问题所以改提交在了他的个人项目中
  • 编译时请老师编译Src文件夹下后缀为.Java的文件。

遇到的问题及其解决方法。

  • 问题1去重

    解决:我去网上找了很多资料之后还是没有找到一个比较好的方法来去重后来就选择了在设计思路中说到的两种方法来进行测试。

    这个问题还没有找到很好的方法来解决。

对结对的小伙伴做出评价

  • 结对伙伴: 20162324 春旺

    我的结对编程伙伴是春旺,他学的比我扎实,完成作业也比我认真,所以代码他比我敲的多一些。但很多问题他只是自己去解决(比如去重就卡了差不多两天,他开始的比较早),希望以后能多和其他同学交流,这样很多问题解决起来会有个相对明确的思路。

PSP

PSP2.1 Personal Software Process Stages 预估耗时(小时) 实际耗时(小时)
Planning 计划 1 1
· Estimate · 估计这个任务需要多少时间 20 20
· Analysis · 需求分析 (包括学习新技术) 0.5 2.5
· Design Spec · 生成设计文档 1 1
· Design Review · 设计复审 (和同事审核设计文档) 0.5 0.5
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 1 1
· Design · 具体设计 2 2.5
· Coding · 具体编码 2.5 2.5
· Code Review · 代码复审 2 2.5
· Test · 测试(自我测试,修改代码,提交修改) 2 1
Reporting 报告 1 1.5
· Test Report · 测试报告 2 1.5
· Size Measurement · 计算工作量 1 1.5
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 1 1

最新文章

  1. Linux简单的日志审计
  2. MVC 使用Jquery EasyUI分页成功
  3. [python]使用virtualenv处理python版本问题
  4. PHP 输出图像 imagegif 、imagejpeg 与 imagepng 函数
  5. [Redis] redis-cli 命令总结
  6. Python元类实践--自己定义一个和collections中一样的namedtuple
  7. 【Java基础】继承的一些总结
  8. Python中利用xpath解析HTML
  9. Why Does Qt Use Moc for Signals and Slots(QT官方的解释:GUI可以是动态的)
  10. JDK6、Oracle11g、Weblogic10 For Linux64Bit安装部署说明
  11. 【Java学习笔记之十五】Java中的static关键字解析
  12. TP5.0 excel 导入导出
  13. 洛谷P3164 [CQOI2014]和谐矩阵
  14. Javaweb拦截器
  15. T-SQL流程控制语句
  16. Spring Boot 的 10 个核心模块
  17. orocos_kdl学习(二):KDL Tree与机器人运动学
  18. linux basic test
  19. Sql Server中的游标最好只用于有主键或唯一键的表
  20. JVM内存分布

热门文章

  1. hdu 1556(线段树之扫描线)
  2. 探索ReactNative应用
  3. 第一章:获取服务器服务banner
  4. js 验证ip列表
  5. 【bzoj4373】算术天才⑨与等差数列
  6. Filecoin:一种去中心化的存储网络(一)
  7. C++变量类型转换
  8. ReentrantLock 学习
  9. 《java并发编程实战》读书笔记1--线程安全性,内置锁,重入,状态
  10. OpenCL学习笔记(三):OpenCL安装,编程简介与helloworld