zoukankan      html  css  js  c++  java
  • 20165231 结对编程项目_四则运算阶段总结

    题目描述

    邹欣老师在《现代软件工程讲义 3 结对编程和两人合作》一文中提到:

    在结对编程模式下,一对程序员肩并肩地、平等地、互补地进行开发工作。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等。

    生活中也有很多类似的搭档关系,例如:

    越野赛车(驾驶,领航员)
    驾驶飞机(驾驶,副驾驶)
    战斗机的编组(长机,僚机)
    

    我们把结对编程中两位合作者的关系看作驾驶员和领航员,其中:

    驾驶员(Driver)是控制键盘输入的人
    领航员(Navigator)起到领航、提醒的作用
    

    在本次结对编程中,即需要两位合作者之间建立驾驶员和领航员的关系。

    中缀表达式与后缀表达式

    中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运算数后面的表达式,比如1 2 +。为什么要讲后缀表达式呢?因为电脑运算后缀表达式会比中缀表达式方便很多。那么如何运算后缀表达式呢?

    举个例子:计算9+(3-1)*3+6/2,转换为后缀表达式即为9 3 1 - 3 * + 6 2 / +(怎么转换后面再讲)。计算规则就是建立一个空栈,遇到数字就入栈,遇到符号就以符号前面的两个数为运算数进行计算。
    image
    image

    中缀表达式转换为后缀表达式

    法则:

    • 如果遇到数字,我们就直接将其输出。
    • 如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈。
    • 如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈。
    • 如果遇到运算符号且栈非空,查看栈顶元素,如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符。最后将该元素入栈。
    • 如果我们读到了输入的末尾,则将栈中所有元素依次弹出。

    测试说明

    产品代码主要进行三个方面的测试:

    • 正常测试
    • 异常测试
    • 边界测试

    实验过程

    • 首先要有一个方法类实现计算方法
    • 然后再有一个类作为错误判断测试输出。
      -image

    核心代码:加减乘除的运算

    import java.util.Random;
    
    public class Output {
    
        private int a, b;
        private int i;
        private String operator[]={"+","-","×","÷"};
    
        public Output(){
    
            while(true){
    
                a=new Random().nextInt(100);
                b=new Random().nextInt(100);
                i=new Random().nextInt(4);
    
                if(i==1&&a<b){
                    continue;
                }
    
                if(i==3){
                    if(b==0){
                        continue;
                    }
                    if(a%b!=0){
                        continue;
                    }
                }
                break;
            }
        }
    
        public String getString(){
            return new String(a+operator[i]+b+"=");
        }
    
        public  boolean panduan(String s){
            int i,result = 0;
            try{
                i=Integer.valueOf(s).intValue();
            }catch(Exception e){
                return false;
            }
    
            switch(this.operator().toCharArray()[0]){
                case '+':result=this.getA()+this.getB();break;
                case '-':result=this.getA()-this.getB();break;
                case '×':result=this.getA()*this.getB();break;
                case '÷':result=this.getA()/this.getB();break;
            }
    
            if(result==i){
                return true;
            }return false;
        }
    
        public String operator(){
            return operator[this.i];
        }
    
        public int getA() {
            return a;
        }
    
        public int getB() {
            return b;
        }
    }
    

    运行测试

    image
    代码

    结对搭档

    搭档:20165220葛宇豪

    起初看到四则运算我一位只是做一个简易的计算器,当打开要求发现事情并没有那么简单。然后就开始各种思考参考,想出类似于伪代码的一个框架,按照框架一步步实现,但是由于能力和学识的限制很多功能并不能很好的实现,或者没法实现没做出来。目前出来的算是勉强可以看的结果吧。后续还会接着改进。
    image

  • 相关阅读:
    虚拟机环境
    R语言里一些画图程序不能在循环里正常保存的解决办法
    python 图片处理(更新)
    服务器跑代码小tips
    [论文笔记] :Temporal Graph Networks for Deep Learning on Dynamic Graphs
    [论文笔记] Detecting early-warning signals for sudden deterioration of complex diseases by dynamical network biomarkers
    堆和优先队列的写法
    [论文笔记] :Detection for disease tipping points by landscape dynamic network biomarkers
    Computational Physics
    WCSPH实现方法
  • 原文地址:https://www.cnblogs.com/Yhooyon/p/8850246.html
Copyright © 2011-2022 走看看