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]);elsebreak;}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

九、点评伙伴

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

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

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

  1. 20172302『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    一.结对对象 姓名:周亚杰 学号:20172302 担任角色:驾驶员(周亚杰) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...

  2. 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...

  3. 20165236 2017-2018-2 《Java程序设计》结对编程练习_四则运算

    20165236 2017-2018-2 <Java程序设计>结对编程练习_四则运算 结对小组:叶佺.郭金涛 一.需求分析: 1.能随机生成n道四则运算题目,n由使用者输入: 2.支持多种 ...

  4. java 编程联系_《JAVA程序设计》结对编程联系_四则运算(第二周:整体性总结)...

    #结对对象与其博客链接 20175312陶光远:https://www.cnblogs.com/20175312-tgy/p/10697238.html #需求分析 (一)功能需求 1.自动生成题目( ...

  5. java 编程联系_《JAVA程序设计》结对编程联系_四则运算(第一周:阶段总结)...

    结对对象与其博客链接 需求分析 (一)功能需求 1.自动生成题目(本周已完成) 可生成包含不同运算符个数的题目 2.题目运算(判题)(这周先做了真分数,运算和后缀计算打算下周做) 实现中缀表达式转为后 ...

  6. 20175208『Java程序设计』课程 结对编程练习_四则运算

    20175208 结对编程练习_四则运算(第一周) 结对成员:20175208张家华,20175202葛旭阳 一.需求分析: 实现一个命令行程序,要求: (1)自动生成指定数量的小学四则运算题目(加. ...

  7. 20165101刘天野 2018-2019-2《网络对抗技术》第1周 Kali的安装

    20165101刘天野 2018-2019-2<网络对抗技术>第1周 Kali的安装 一.实验要求 Kali下载 安装 网络 共享 软件源 二.实验步骤 1.下载 从Kali官网中下载相应 ...

  8. java程序设计 一种跨学科_清华大学出版社-图书详情-《Java程序设计:一种跨学科的方法》...

    对于传统的CS1课程来说这本书是跨学科的方法.在本书中,作者重点讲述了从材料科学.基因组.天体物理学到网络系统等各学科中计算的角色.这种方法主要是向学生强调在当今世界中,数学.科学.工程和计算是紧密联 ...

  9. java程序设计 第三版_清华大学出版社-图书详情-《Java语言程序设计(第3版)》...

    第3版前言 Java语言是目前应用最广泛的编程语言之一,学习和使用Java的人越来越多.为了帮助初学者尽快掌握Java编程,感受到Java语言的魅力,领会到Java编程的快乐,笔者根据长期Java授课 ...

最新文章

  1. 阅读王概凯老师架构漫谈系列总结
  2. WPF企业内训全程实录(下)
  3. oracle sysnonym,Oracle权限
  4. java if,if...else...的应用
  5. node.js ejs的视图模块引擎
  6. php pc_base,phpcms二次开发之base.php的桥梁作用_PHP教程
  7. LeetCode 653. Two Sum IV - Input is a BST
  8. python默认参数不能定义为可变对象类型
  9. C/C++指针 引用
  10. pytorch项目代码总结
  11. Linux高性能server规划——多线程编程(在)
  12. Ruby设计模式透析之 —— 适配器(Adapter)
  13. Pandas DataFrame 函数应用和映射
  14. web前端学习(总结/心得)
  15. Data Base学习记录:关系模型
  16. HID热插拔后,设备状态改变,上位机自动识别
  17. flac格式怎么转换mp3格式?
  18. esclip直接快捷键构造函数_IntelliJ Idea 常用快捷键
  19. Linux远程控制音乐播放,总结一下linux远程控制方法
  20. redis requires ruby version 2.2.2的解决方案

热门文章

  1. net中 css 控制 GridView 样式
  2. Ext Designer Preview生成代码在html上显示步骤
  3. Query框架学习第九天:jQuery工具函数介绍与使用
  4. 强化学习《基于价值 - Q-Learning》
  5. [深度学习-实践]GAN入门例子-利用Tensorflow Keras与数据集CIFAR10生成新图片
  6. python热键+鼠标键盘控制
  7. 稳健估计/M估计/最小二乘法
  8. BFGS C++优化算法曲线拟合实现
  9. 外参矩阵(旋转矩阵+平移向量)以及外方位元素的关系
  10. VC RichEdit插入表格(RTF形式)