20175227张雪莹 2018-2019-2《Java程序设计》
结对编程项目-四则运算 第一周 阶段性总结
需求分析
- 自动生成小学四则运算题目(加、减、乘、除)
- 支持整数
- 支持多运算符(比如生成包含100个运算符的题目)
- 支持真分数
- 统计正确率
设计思路
- 首先,程序需要读取用户希望做的习题数目,存于后台
- 其次,程序需要产生1-100随机数字和随机运算符(“+ - * /”)
- 算式长度要随机
- 后台要计算产生的随机式子的正确答案并存储
- 在用户输入数字后,要与正确答案进行比较
- 若用户做对,则记录正确题数
- 若用户做错,则输出正确答案
- 输出用户此次练习的正确率
- 扩展
- 产生有无括号的式子
- 能够计算真分数
UML类图
功能截图
JUnit测试
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码托管
遇到的困难及解决办法
- 问题1
- 一开始打算生成一个储存算式的字符串数组,长度用随机数生成,偶数位存数字,奇数位存运算符,然后用中缀表达式转后缀表达式计算正确结果。后来编译程序时,发现提示空指针错误,并且用中缀转后缀计算程序太过冗杂
- 问题1及解决方法
- 求助网络后,和结对伙伴发现了一位网友的在链表中调用JavaScript中
eval
方法可以直接对字符串求值,于是采用该方法
- 求助网络后,和结对伙伴发现了一位网友的在链表中调用JavaScript中
- 问题2
- 由于不了解链表真实含义,导致我们在实际编程中总是出现未知错误
- 问题2及解决方法
- 于是我们找到另一种方法:
通过引入下面这几个包
- 于是我们找到另一种方法:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
在main
方法中直接调用eval
方法
- 问题3
eval
方法不能直接输出算式的值,否则会出现空指针或数据类型错误提示
- 问题3及解决方法
- 将
eval
值赋给Boolean
类型result
,存入字符串数组str
为如“5+3==7
”的逻辑式,直接判断用户输入是否正确;再将eval
值赋给输出正确答案字符串数组ca
,实现正确答案输出,程序如下:
- 将
String str=ex+"="+"="+ua; //将用户答案逻辑式放在字符串str中
Boolean result =(Boolean)se1.eval(str); //用eval方法计算用户答案逻辑式
String ca="="+se2.eval(ex); //生成correct_answer字符串存正确答案
- 问题4
- 统计正确题目数
count
时,无法将count
从judgeFormula
中返回,count
值仍为0
- 统计正确题目数
- 问题4及解决方法
- 在参考学姐博客后,选择加入如下包:
import java.text.NumberFormat;
调用该类中方法getPercentInstance
来返回当前默认语言环境的百分比格式,如下:
- 在参考学姐博客后,选择加入如下包:
NumberFormat num = NumberFormat.getPercentInstance();//调用getPercentInstance方法
……
double T = (double) jud.getTrues()/n;
System.out.println("正确率为:"+num.format(T));
结对总结
- 在这周的结对学习中,我和我的结对伙伴通过互相配合、帮助、纠正错误,完成了四则运算的阶段学习任务
- 在编程过程中,我的伙伴为程序寻找了许多方法,提供了很多方案,比如使用链表引入
eval
方法;并在程序纠错过程中查出了很多错误并改正 - 在此周结对学习中,我学到了很多知识,知道了
eval
方法这样简单就能实现计算字符串数组中的内容,可以使用NumberFormat
类中getPercentInstance
方法来返回当前默认语言环境的百分比格式。最终,我们的程序代码行数虽少却实现了程序所要求拥有的功能