20162312Java结对编程之挑战出题

需求分析

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

设计思路

  • 具体的思路:

  • 思路一:
    原本我和春旺商量通过集合中的元素的不重复性进行去重。但是运算符多也导致重复的数字多,去重的数量也大大增多越到后面效率越低,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
原文地址:https://www.cnblogs.com/1zhjch/p/6941912.html