20165101刘天野 2017-2018-2 《Java程序设计》 结对编程练习_四则运算(第二周)

20165101刘天野 2017-2018-2 《Java程序设计》 结对编程练习_四则运算(第二周)

一、需求分析

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

二、设计思路

本项目主要分为两大部分。第一部分是对复杂计算式的计算,第二部分是随机题目的生成。

对于复杂计算式的计算,我参考了娄老师的博客2016-2017-2 《Java 程序设计》课堂实践项目——数据结构应用中的逆波兰式的思想来解决,真分数的运算参考课本中第四章的例子22。

对于随机计算式的生成,我利用了Random类中的nextInt()方法,根据生成的随机数,生成对应的运算符和数字,从而形成计算式。

三、本周达成功能:

  • 能够随机生成n道题目,n由用户输入;
  • 支持真分数运算,支持多运算符;
  • 能够计算正确率。

三、关键代码及解释

复杂计算式的读取与计算:
Rational manage() {
    int i=0;
    Rational r = new Rational();
    double d;
    while(true) {
        if(i>=a.length())
            break;
        char c = a.charAt(i);
        if(c>='0' && c<='9') {//从字符串中检测数字
            String temp = String.valueOf(c);
            String s = new String();
            s = s+temp;
            i++;
            if(i>=a.length()) {
                d = Double.parseDouble(s);
                r.setNumerator(d);
                datastack.push(r);
                break;
            }
            c = a.charAt(i);
            while(c>='0' && c<='9') {
                temp = String.valueOf(c);
                s = s+temp;
                i++;
                if(i>=a.length())
                    break;
                c = a.charAt(i);
            }
            d = Double.parseDouble(s);
            r.setNumerator(d);
            datastack.push(r);
            continue;
        }
        else if(c=='*' || c=='/') {//从字符串中检测运算符
            while(true) {
                if(charstack.top==-1) {//如果符号栈顶无元素,入栈。
                    charstack.push(c);
                    break;
                }
                if(charstack.a[charstack.top]=='+' || charstack.a[charstack.top]=='-') {//如果符号栈顶是+或-,入栈。
                    charstack.push(c);
                    break;
                }
                else if((charstack.a[charstack.top]=='*' || charstack.a[charstack.top]=='/') && (datastack.top>=1)) {//如果符号栈顶是*或/,并且栈内元素大于等于1,计算。
                    calculate(charstack.a[charstack.top]);
                    continue;
                }
                else {
                    charstack.push(c);
                    break;
                }
            }
        }
        else if(c=='+' || c=='-') {
            while(true) {
                if(charstack.top==-1) {//如果符号栈顶无元素,入栈。
                    charstack.push(c);
                    break;
                }                       
                else if((charstack.a[charstack.top]=='+' || charstack.a[charstack.top]=='-' || charstack.a[charstack.top]=='*' || charstack.a[charstack.top]=='/') && (datastack.top>=1)) {
                    calculate(charstack.a[charstack.top]);//计算。
                    continue;
                }
                else {
                    charstack.push(c);
                    break;
                }
            }
            
        }
        else if(c=='(') {//如果符号是(,入栈。
            charstack.push(c);
        }
        else if(c==')') {//如果符号是),栈内符号依次计算。
            while(true) {
                if(charstack.a[charstack.top]=='(') {
                    charstack.pop();
                    break;
                }
                else {
                    calculate(charstack.a[charstack.top]);
                }
            }
        }
        i++;
    }
    while(true) {
        if(datastack.top>=1)
            calculate(charstack.a[charstack.top]);
        else
            break;
    }
    return datastack.pop();
}

四、UML图

1043510-20180511221116501-156053795.png

五、测试方法

六、运行过程截图

1043510-20180511201917687-106426150.png

七、代码托管

码云链接

八、遇到的困难

问题一:随机生成题目,如何随机生成括号,以及如何保证生成计算式的正确性。

PSP

PSP2.1Personal Software Process Stages预估耗时(小时)实际耗时(小时)
Planning计划0.50.5
Estimate估计这个任务需要多少时间0.51
Development开发22.5
Analysis需求分析(包括学习新技术)24
Design Spec生成设计文档11
Disign Review设计复审(和同事审核设计文档)0.51
Code Standard代码规范22
Design具体设计32
Coding具体编码56
Code Review代码复审11.5
Test测试(自我测试,修改代码,提交修改)23
Reporting报告22.5
Test Report测试报告1.52
Size Measurement计算工作量0.50.5
Postmortem&Process Improvement Plan事后总结,并提出过程改进计划11
total合计24.530.5

九、点评伙伴

随着合作的次数不断增加,我和队友的配合也愈发默契了,结队编程的效率有显著的提升。在关键问题的决策我们也能很快达成共识,这样很有利于我们项目的推进。希望我们以后还能一起合作,一起学习,一起做项目。

转载于:https://www.cnblogs.com/lty12345678911/p/8910881.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值