zoukankan      html  css  js  c++  java
  • 四则运算阶段总结

    20162325 结对编程项目-四则运算 阶段总结

    一、需求分析

    • 能随机生成n道题目,n由使用者输入
    • 支持整数的四则运算
    • 能够判断正误,错误时能提醒并输出正确答案
    • 能计算出正确率
    • 能多次生成题目,直到使用者选择退出

    后续拓展的可能

    • 支持真分数
    • 题目去重
    • 支持多运算符
    • 设计一个类可以直接利用中缀表达式进行运算不需要转换

    二、设计思路

    • 设立一个栈和一个列表,栈存放运算符,列表存放操作数
    • 用String类型定义两个10以内随机整数的加、减、乘、除四种方法
    • 运用了栈的方法将中缀表达式转化为后缀表达式
    • 设计一个测试结果的类判断正误

    UML类图

    三、实现过程中的关键代码

    • 中缀表达式转化为后缀表达式
    package Arithmetic;
    
    import java.util.*;
    
    
    /**
     * Created by Administrator on 2017/5/13.
     */
    public class NifixToSuffix {
        private Stack<String> stack;
        private List<String> list;
    
        private String message,Message="";
    
    
        public NifixToSuffix() {
            stack = new Stack<String>();
            list = new ArrayList<String>();
        }
    
        public void conversion(String expr) {
            int op1, op2, result = 0;
            String token;
            StringTokenizer tokenizer = new StringTokenizer(expr);
    
            while (tokenizer.hasMoreTokens()) {
                token = tokenizer.nextToken();
    
                if (token.equals("("))
                    stack.push(token);
                else if (token.equals("+") || token.equals("-")) {
                    if(!stack.empty()) {
                        if (stack.peek().equals("(")){
                            stack.push(token);
                        }
                 else if (stack.peek().equals("*") || stack.peek().equals("/"))
                            list.add(stack.pop());
                    }
                   else stack.push(token);
                }
                else if (token.equals("*") || token.equals("/")) {
                    if(!stack.empty()){
                        if(stack.peek().equals("*")||stack.peek().equals("/")) {
                            list.add(stack.pop());
                        }
                    }
                    stack.push(token);
                }
                else if (token.equals(")")) {
                    while (true) {
                        String A = stack.pop();
                        if (!A.equals( "("))
                            list.add(A);
                        else break;
                    }
                }
                else list.add(token);
            }
            while (!stack.empty()) {
                list.add(stack.pop());
            }
            ListIterator<String > li = list.listIterator();
            while (li.hasNext()) {
                Message += li.next() + " ";
                li.remove();
            }
            message = Message;
    
        }
    
        public String getMessage() {
            return message;
        }
    }
    
    

    迭代代码如下

     ListIterator<String > li = list.listIterator();
     while (li.hasNext()) {
         Message += li.next() + " ";
         li.remove();
     }
    

    四、测试方法

    • NifixToSuffix类的方法的测试

    • Judgement类的方法测试

      • evaluate()方法

      • isOperator()方法

    五、运行过程截图

    六、代码托管地址

    七、遇到的困难及解决方法

    • 问题1

    本来应该打印出“请输入要生成的题目数”结果显示的却是一串乱码

    • 解决方法

    输入ctrl + alt + s,搜索encoding设置GBK或UTF-8

    八、对结对的小伙伴的评价

    坦白一直以来学得挺吃力,很多东西都不知所以, 张之睿同学始终耐心讲解,我会继续跟从他的指导,多花时间,希望能逐步赶上大部队。

    十、PSP

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划
    · Estimate · 估计这个任务需要多少时间 20 30
    Development 开发
    · Analysis · 需求分析 (包括学习新技术) 90 120
    · Design Spec · 生成设计文档 120 140
    · Design Review · 设计复审 (和同事审核设计文档) 30 25
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 30
    · Design · 具体设计 120 150
    · Coding · 具体编码 300 400
    · Code Review · 代码复审 60 50
    · Test · 测试(自我测试,修改代码,提交修改) 60 90
    Reporting 报告
    · Test Report · 测试报告 90 120
    · Size Measurement · 计算工作量 30 30
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 30
    合计 980 1215
  • 相关阅读:
    Java 日期时间类
    JavaMail
    PHP连接 SQLSERVER 注意事项(经典中的经典)
    Spring 依赖注入的 几种方式
    ms sql 备份指令
    Struts2 日期类型编辑器 和 struts.xml 的存放路径
    如何将二维数组作为函数的参数传递
    gcc编译
    关于fflush(stdin)的使用与scanf输入缓冲区的问题
    LINUX socket 连接的几个问题
  • 原文地址:https://www.cnblogs.com/JXY6996/p/6853695.html
Copyright © 2011-2022 走看看