zoukankan      html  css  js  c++  java
  • 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图

    五、测试方法

    六、运行过程截图

    七、代码托管

    码云链接

    八、遇到的困难

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

    PSP

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

    九、点评伙伴

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

  • 相关阅读:
    oracle锁表查询,资源占用,连接会话,低效SQL等性能检查
    oracle临时表
    oracle列转行
    oracle数据库查询重复记录
    查找mysql的cnf文件位置
    Nginx反向代理,负载均衡,redis session共享,keepalived高可用
    Linux 软件安装
    Linux上网设置
    c#学习内容
    PHP八大设计模式
  • 原文地址:https://www.cnblogs.com/lty12345678911/p/8910881.html
Copyright © 2011-2022 走看看