20175227张雪莹 2018-2019-2《Java程序设计》

结对编程项目-四则运算 第二周

需求分析

  • 自动生成小学四则运算题目(加、减、乘、除)

    • 支持整数
    • 支持多运算符(比如生成包含100个运算符的题目)
    • 算式含括号
    • 支持真分数
    • 当无真分数计算时,让被除数尽量可以被除数整除
  • 统计正确率
  • 将算式写入文件

设计思路

  • 读取用户希望做的习题数目,存于后台
  • 读取用户希望练习的题目类型:1——无真分数计算,2——有真分数计算
  • 产生1-100随机数字和随机运算符(“+ - * / ()”)
    • 算式长度要随机
  • 后台要计算产生的随机式子的正确答案并存储
  • 将算式(不含正确结果)输出至文件中
  • 在用户输入数字后,要与正确答案进行比较
    • 若用户做对,则记录正确题数
    • 若用户做错,则输出正确答案
  • 输出用户此次练习的正确率

UML类图

实现过程中的关键代码解释

  • 控制括号代码:
int flag=random.nextInt(2);//随机控制有无括号……switch(flag){case 0:s[0]= random.nextInt(4);//随机生成运算符下标ex += String.valueOf(number[j]) + String.valueOf(op[s[0]]);//添加一对数字和运算符if(s[0]==3){number[j+1]=f.decide(number[j],number[j+1]);}break;case 1:s[1]= random.nextInt(4);//随机生成运算符下标ex+="("+String.valueOf(number[j]) + String.valueOf(op[s[1]]);//添加左括号和数字和运算符if(s[1]==3){number[j+1]=f.decide(number[j],number[j+1]);}flag++;break;case 2:s[2]=random.nextInt(4);ex+=String.valueOf(number[j]) + ")"+String.valueOf(op[s[2]]);//添加右括号和数字和运算符
  • 尽量使得除数整除被除数:
if(s[2]==3){switch(s[1]){//区分之前括号里运算结果对后面数取整case 0:number[j+1]=f.decide(number[j]+number[j-1],number[j+1]);break;case 1:number[j+1]=f.decide(number[j]-number[j-1],number[j+1]);break;case 2:number[j+1]=f.decide(number[j]*number[j-1],number[j+1]);break;case 3:number[j+1]=f.decide(number[j]/number[j-1],number[j+1]);break;default:;}

decide方法:

 public int decide(int x,int y){//判断是否整除,返回能整除数Random random=new Random();if(x%y!=0){y=random.nextInt(100)+1;return decide(x,y);}else{return y;}}
  • 将算式输出于文件:
public class WAndRFile {String ua=new String();//用户答案public void writeToFile(String str){File fw=new File("practice.txt");//写入的文件try{Writer out=new FileWriter(fw);//指向目的地输出流BufferedWriter bw=new BufferedWriter(out);bw.write(str);//写入字符串strbw.newLine();//换行bw.close();//高级流关闭out.close();//关闭底层流}catch (IOException e){e.printStackTrace();}}
}

功能截图

  • 不含真分数

  • 写入文件

  • 含真分数

测试方法

遇到的困难及解决办法

  • 问题1:计算真分数时,出现负数的情况下,输入判题会有问题。比如:用户计算出答案-4/3,正确答案为-4/3,但程序判错,显示正确答案为:4/-3。
  • 问题1解决办法:将程序中出现负数情况先取反,再求最大公因子进行分式约分。程序为:
if(nu_2[0]<0){//分子为负数时nu_2[0]=-nu_2[0];//取反ca=ex+"-"+f.yuefen(nu_2[0],nu_2[1]);//加上负号}
  • 问题2:计算真分数时,会出现正确答案未约分就输出的情况。
  • 问题2解决办法:
Boolean result=ua.equals(ca);
jud.judgeFormula(result,ca);

将以上代码放到最外层循环体中,之前误将该语句放到switch语句中。

  • 问题3:由于第一周编程时未考虑除数与被除数整除关系,使得非真分数计算时有些小数位数过长,不便于用户输入答案,如下图:

  • 问题3解决办法:尽量将除数整除被除数,分为除数前为+、-、*、()的情况分别调用decide方法取整。

public int decide(int x,int y){//判断是否整除,返回能整除数Random random=new Random();if(x%y!=0){y=random.nextInt(100)+1;return decide(x,y);}else{return y;}}

代码托管

四则运算

结对总结

  • 在本周结对学习过程中,我们合力解决了许多问题:在对于添加“()”的问题上,我的结对伙伴想出了用产生随机flag并作为控制添加左右括号的判断条件(并不会出现多个括号叠加输出的情况)和switch语句来控制括号有无的好办法。这使得我们在产生含括号的算式上少走了很多弯路,我借此机会对他道一声:谢谢!
  • 其实学习过程中会遇到很多自己解决不了的问题,这时候就需要上网寻找答案,或是通过调试程序来解决问题。
  • 结对学习的好处就是,能在学习过程中通过互相讨论、纠错、提供解决办法,获得更好的学习效果。

结对学习照片

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 10 5
Estimate 估计这个任务需要多少时间 10 20
Analysis 需求分析(包括学习新技术) 30 30
Design Spec 生成设计文档 40 60
Design Review 设计复审 90 60
Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 40
Design 具体设计 30 40
Coding 具体编码 400 600
Code Review 代码复审 90 60
Test 测试(自我测试,修改代码,提交修改) 60 40
Size Measurement 计算工作量 10 5
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20 30
合计 810 990

参考资料

  • https://www.cnblogs.com/musea/p/8848688.html
  • https://www.cnblogs.com/dushik/p/8580705.html
  • https://wenwen.sogou.com/z/q658601950.html

转载于:https://www.cnblogs.com/zxy20175227/p/10702725.html

结对编程项目-四则运算 第二周相关推荐

  1. 20172307 结对编程项目-四则运算 第二周 阶段总结

    20172307 结对编程项目-四则运算 第二周 阶段总结 (结队项目码云地址) 相关过程截图(关键代码处加了注释) 编写出实现中缀转后缀的类Transform /*Transform.java 作者 ...

  2. 20172305 结对编程项目-四则运算 第二周 阶段总结

    结对编程的好丽友 20172323 王禹涵:中缀转后缀 20172314 方艺雯:后缀表达式的计算 20172305 谭鑫:中缀表达式的输出 遇到的困难和解决方案 问题1:括号的添加方法 解决方案: ...

  3. 20165330 结对编程项目-四则运算 第一周

    需求分析 实现一个命令行程序,要求:自动生成小学四则运算题目(加.减.乘.除) 可实现多个运算符一起运算 可以真分数形式输出结果 测试结果的正确性 统计题目完成数并计算正确率 设计思路 实验首先是完成 ...

  4. 20162303 结对编程项目-四则运算 第一周输出阶段总结博客

    第一周(2017-5-14 23:59截止)输出阶段总结博客 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 ...

  5. 结对编程项目-四则运算(第一周阶段性总结)

    结对编程项目-四则运算(阶段性总结) 需求分析 题目生成 多运算符(可设计层级) 包含括号(可单独使用) 无重复题目(可单独使用) 生成有意义的题目(例如:5x(5x5)等等) 等级划分 Level ...

  6. 结对编程项目-四则运算整体总结

    结对编程项目-四则运算整体总结 在这一周中,我和我的搭档完成项目并实现了拓展需求,现在我将本项目的成果做一个总结 一.需求分析 实现一个命令行程序,要求: 1.自动生成小学四则运算题目(加.减.乘.除 ...

  7. 20165318 结对编程项目-四则运算 阶段总结

    20165318 结对编程项目-四则运算 阶段总结 目录 一.需求分析 二.设计思路 三.实现过程中的关键代码解释 四.测试方法 五.运行过程截图 六.代码托管 七.遇到的困难及解决方法 八.对结对小 ...

  8. 结对编程项目-四则运算阶段性总结

    结对编程项目-四则运算阶段性总结 在这段时间的结对编程过程中,我和我的组员一同编程,初步完成了项目的要求,现在我将阶段性的成果做一个总结 一.需求分析 实现一个命令行程序,要求: 1.自动生成小学四则 ...

  9. 结对编程项目-四则运算答题器-设计文档

    项目名称:四则运算生成器 项目成员:焦广鑫,杜念泽 开发环境:Python2.7 需要实现的功能:加.减.乘.除四则基本运算 转载于:https://www.cnblogs.com/jgxblog/p ...

  10. 结对编程项目---四则运算

    同组人:郝哲 黄云龙 评价:在这次作业完成中我们都积极地查询了有关资料,并向大神咨询获得了帮助,学习的过程中更更加深入的了解了C#的编写. 感谢:感谢同组同学的帮助,感谢大神的辅导,感谢百度贴吧大神的 ...

最新文章

  1. js使用ajax发送post json,javascript-如何用ajaxpost复杂json数据
  2. Python双版本下No module named 'requests'
  3. Map 遍历取值及jstl的取值
  4. lightoj 1044 - Palindrome Partitioning(需要优化的区间dp)
  5. linux 标准 GPIO 操作
  6. mysql 存储引擎作用_MySQL常用存储引擎功能与用法详解
  7. 华为大数据平台使用pyhive连接hive的方法(Kerberos验证)
  8. MP4Box获取MP4媒体文件的播放时长
  9. O-RAN专题系列-41:管理面-WG4.MP.V07-规范解读-第8章-故障管理FM
  10. 简单输出斐波那契数列
  11. stack smashing detected(c++报错)
  12. 团队项目(小小大佬带飞队)
  13. 女性吃什么食物会导致不孕?
  14. 高级着色语言HLSL入门
  15. 基于 OpenSSH 的身份认证与密钥管理
  16. ASCII码中不同字符分类、含义及相关技巧
  17. python闭包的应用场景_python闭包浅见
  18. Antd Pro项目接入qiankun微前端
  19. UserInterface的使用总结篇(完结篇)
  20. matlab创建圆点标定板,Halcon学习(十八)如何制作标定板

热门文章

  1. tomcat部署安装
  2. 帆软单元格以HTML显示内容(点击更改herf值和onclik值)
  3. JS中时间格式化常用方法
  4. 自定义函数计算某个字符在字段中出现的次数
  5. php 请求 响应,发送http响应后继续处理php
  6. 力扣题目系列:1313. 解压缩编码列表
  7. airpods pro是按压还是触摸_为什么都不推荐购买AirPods Pro,看完这6个缺陷,你就明白了...
  8. [改善Java代码]使用CyclicBarrier让多线程齐步走
  9. Java 下一代: Groovy、Scala 和 Clojure
  10. MYSQL查询重复记录的方法