四则运算

  代码地址:https://coding.net/u/yydbz/p/Java/git/blob/master/.gitignore

  废话不多说,直接进入正题。接下来是我对这次四则运算作业的一些小思路或者体会。

  拿到这个作业,并没有太过去细读需求。刚开始甚至想直接用js写个网页版的,再读要求之后才发现必须要用控制台来运行。对于四则运算当然都不陌生,简单的加减乘除,看上去是蛮简单,实现起来还是有一定难度。难度主要体现在分数的计算。其实乍一看是分数,其实分数也是由整数组成的表达式而已。而显示要求必须采用真分数形式,这个的实现也比较简单,只要将随机生成的假分数进行转换就行了。在计算方面就肯定不可能使用真分数来计算,所以我就将真分数和假分数统一保存在一个数组中,产生的显示表达式和计算的表达式分别使用数组中的真分数和假分数。(中间代码由于脑袋短路除了错,补救之后的代码真是长得其丑无比)优先考虑实现,后考虑性能,(主要因为懒)我也没有对代码进行优化。这些都是我在实现代价前的想法。

  在功能设计上基本与要求相同:1.分数的显示是采用真分数 2.操作符随机生成1-3个(这里需要吐槽一下,如果把分数看成整数形式,其实一个分数就已经带了一个操作符了,可能是我把问题看复杂化了,若是三个运算符,就会有四个分数运算数)3.数值的范围和运算式的个数都是手动输入的 4.答案填写完之后会校验正确率并输入到txt文件中

  接下来就是实现这些功能了,整个项目我只写了一个java类,总共代码三百余行,方法全都定义成静态的方便调用。以下是主要的几个函数及其功能:randomNum()函数负责生成随机分数并转化为真分数形式,最后返回一个存储了假分数形式和真分数形式的数组。randomOperator()函数负责生成随机字符。randomEquation(int range)函数负责接收用户输入的数范围根据数调用上述两个方法随机生成运算式。Calculate(String equation)函数负责接收假分数运算式并计算出结果,返回的事一个double型的值。WriteStringToFile(String filePath,String s,boolean flag)函数负责对txt文本的写操作,封装起来比较好用,flag用来判断是否是覆盖式写入。

  代码其实没有要多的技术性,主要只是实现功能,所以代码写的又臭又长。在性能方面上,虽没有测试,但我知道一定很垃圾。还有查重我并没有去做,也没有去看那些用树来实现的想法。主要这个功能其实并不是特别需要,而且随机生成的运算式重复率不大(其实还是懒)。思路方面,我的想法是先判断运算结果,再判断运算数,若都一致基本可以认定是重复了。

  接下来是测试的一些截图了(代码冗长就不贴出来了,写些注释放coding里就行了,不丢人现眼了)。

这是再控制台上假分数运算式的形式。这是在文本文件中生成的真分数形式的显示式。

这是在文本填写的答案这是控制台及文本中的正误判断

PSP2.1 Personal Software Process Stages Time Senior Student Time
Planning 计划 5 5
· Estimate 估计这个任务需要多少时间 600 360
Development 开发 300 180
· Analysis 需求分析 (包括学习新技术) 5 5
· Design Spec 生成设计文档 0 0
· Design Review 设计复审 0 0
· Coding Standard 代码规范 0 0
· Design 具体设计 10 10
· Coding 具体编码 250 140
· Code Review 代码复审 30 15
· Test 测试(自我测试,修改代码,提交修改) 30 120
Reporting 报告 30 35
· 测试报告 0 0
· 计算工作量 0 0
· 并提出过程改进计划 3 3

  接下来便是这个项目的小结。小结在我看来是重中之重。我就讲一下整个完整的思路。首先是生成随机分数,然后转化为真分数形式进行显示,计算时还是使用假分数。然后将运算式转成后缀表达式并计算得出double型结果。将用户写的答案同样转换为后缀表达式并计算得到一个double型值,将两个值转化为float,丢失一定精度之后判断是否相等来得出是否计算正确。判断正误的方法算是我偷工减料的利器吧。刚开始想到的办法是将后缀表达式的计算进行改造然后得出一个假分数的结果,后来觉得麻烦就决定采用这个简单的办法。

posted @ 2017-09-23 16:57  圆圆的包子  阅读(254)  评论(2编辑  收藏  举报