coding地址: https://git.coding.net/lvgx/week_2.git
一. 需求分析
1.接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题
2.每个数字在 0 和 100 之间,运算符在3个到5个之间。
3.每个练习题至少要包含2种运算符。
4.所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3÷5+2=2.6,2-5+10=7等算式。
5.练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
附加需求(改进部分):
1.支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。
2.扩展程序功能支持真分数的出题与运算(只需要涵盖加减法即可),例如:1/6 + 1/8 + 2/3= 23/24。注意在实现本功能时,需支持运算时分数的自动化简,比如 1/2+1 /6=2/3,而非4/6,且计算过程中与结果都须为真分数。
二.功能设计
实现点击可执行程序,出现提示词“请输入要生成的运算式”,运行结束,显示运算式,且运算式满足题目要求。最后计算结束,可以点击文件“result.txt”,对照答案。
三.设计实现
设计了三个类
main:主函数,实现输出运算式,运算的功能
symbol:随机实现运算符
randomnumber:随机生成随机数
四.算法详解
1.生成随机数
有Math类的random()方法以及Random类生成随机数两种方式,选择了第一种较为熟悉便捷的方法,并将生成随机数的方法装入一个类,便于调用,实现模块化
2.生成随机符号
将四种运算符装入一个数组中,通过生成随机数,对应到数组的检索值,并且个数满足设定范围,当几个随机符号一致时,将最后一个重新生成且不同于其他符号,并且覆盖掉最后一个字符,实现生成随机运算符的步骤
3.生成运算式
将生成的随机数放在一个数组里,将生成的运算符放在一个数组里,将二者合并,去除逗号括号,输出
4.获取生成个数N
通过函数获取输入数字,并判断其是否为正整数,且满足设定范围。
5.运算式的计算
通过迭代进行运算符优先级的判定,进行正常的运算
6.txt文件的生成
五.测试运行
六.代码
int results; int n=numberTest(); //生成问题---------------------------------------------------- Result result = new Result(); String[] boxs = new String[n]; for(int j=0; jresultN = new ArrayList<>(); for (int i = 0; i < nums.length; i++) { resultN.add(nums[i]); } List resultS = new ArrayList<>(); for (int i = 0; i < sysmbols.length; i++) { resultS.add(sysmbols[i]); } Box box = new Box(resultN,resultS); results = result.getResult(box); if(results > 0 ) { temp[Snum + Nnum] = '='; temp[Snum + Nnum+1] = results; temp[Snum + Nnum+2]= "\r\n"; boxs[j] = Arrays.toString(temp).replace(',', ' ').replace('[', ' ').replace(']', ' ') ; j++; } else continue; //生成完毕-------------------------------------------------------- //输出 result.outQuestion(boxs); System.out.println(Arrays.toString(temp).replace(',', ' ').replace('[', ' ').replace(']', ' '));
七.总结
其实对于java我并不是非常熟悉,可以说非常薄弱了,对于一个程序,我可能有一定的思维,但是因为不熟悉这门语言而不能熟练的运用相关函数,所以觉得这次作业对我来讲比较困难。通过这次作业,我深深的明白自己的代码能力有多薄弱,别人很快能编辑好的函数方法,我却要查询尝试多次才能实现。这促使我对java学习,有了一个微小的提高,因为只有不断应用,才能更加深刻的了解他的含义。所以我个人觉得,通过项目可以较好的促进个人的学习。还有非常感谢课代表张航同学,是他的耐心和帮助,才能使我在规定时间完成作业。故而有些内容是借鉴张航同学的博客http://www.cnblogs.com/zanghh/
还有我觉得讨论式学习有助于大家共同的提高,就比如说大家交流,互相学习发现还可以通过js成熟的eval函数可以简化运算过程等
八.PSP
SP2.1 | 任务内容 | 计划共完成需要的时间(h) | 实际完成需要的时间(h) |
Planning | 计划 | 25 | 50 |
· Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 25 | 50 |
Development | 开发 | 20 | 45 |
· Analysis | · 需求分析 (包括学习新技术) | 3 | 5 |
· Design Spec | · 生成设计文档 | 0 | 0 |
· Design Review | · 设计复审 (和同事审核设计文档) | 0 | 0 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 0 | 0 |
· Design | · 具体设计 | 3 | 5 |
· Coding | · 具体编码 | 10 | 25 |
· Code Review | · 代码复审 | 2 | 4 |
· Test | · 测试(自我测试,修改代码,提交修改) | 2 | 6 |
Reporting | 报告 | 5 | 5 |
· Test Report | · 测试报告 | 4 | 4 |
· Size Measurement | · 计算工作量 | 0.5 | 0.5 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 0.5 | 0.5 |
九.不足
通过这次小小的项目,我认识到自己知识储备量的不足,也意识到不动手,只会一些理论的东西,并不能提高自己的能力。我会更加努力,做出更好的程序