week2-作业2
项目地址:https://git.coding.net/Rainoob/calculate.git
·1、需求分析:程序可以根据输入的参数n随机产生n道四则运算计算题,每个数字在0-100之间。运算符在三个至五个之间,不能出现分数和负数。将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中。使用Java编程
2、功能设计:基本功能:程序可以根据用户输入的参数产生具体的题目数量,程序能自动计算出答案,且输出答案
扩展功能:支持带括号的运算,且能进行真分数运算
3、设计实现:Main类:主类,接收命令行参数并启动程序;file类:File类:主要的功能实现部分。其中的getFile()函数用来生成运算式并生成得到txt文件;Math类的Random()方法生成随机数
4、算法详解:用if语句分别表达参与运算有三个、四个、五个操作数的情况;再通过switch语句,从第一位操作数运算到最后一位操作数。通过eval函数解决运算符优先级问题
int operationnumber = (int) (Math.random() * 10) % (3) + 3; if (operationnumber == 3) { int A = (int) (Math.random() * 10) % (4) + 1; switch (A) { case 1: consequence = a + b; equation = a + "+" + b; break; case 2: consequence = a - b; equation = a + "-" + b; break; case 3: consequence = a * b; equation = a + "*" + b; break; case 4: consequence = a / b; equation = a + "/" + b; break; } int B = (int) (Math.random() * 10) % (4) + 1; switch (B) { case 1: consequence = consequence + c; equation = equation + "+" + c; break; case 2: consequence = consequence - c; equation = equation + "-" + c; break; case 3: consequence = consequence * c; equation = equation + "*" + c; break; case 4: consequence = consequence / c; equation = equation + "/" + c; break; } }
5、测试运行:
6、代码展示:
class File { public void getFile(int n) throws ScriptException, IOException { ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); java.io.File file = new java.io.File("result.txt"); FileOutputStream fop = new FileOutputStream(file); if (!file.exists()) { file.createNewFile(); }
这一段是生成运算结果文件夹的代码
7、总结:因为自己很少写代码,总是遗漏很多东西,也不能完成很多功能。最开始写这个程序的时候,首先想到的是需要使用生成随机数的Math类的Random()方法。看到题目有一个需求是,参与运算的数有三到五个,当时就很懵,觉得自己要写的话应该会写得十分复杂。不仅要考虑运算符的优先级,还要考虑减法时数值的大小先后问题。其实心里是想到肯定可以用if语句或许switch语句简化代码的,但是就是抓不到要点。后来询问了室友的思路,觉得他的这个算法很好。然后就借鉴了他的算法。首先用if语句分别讨论参与运算数的个数问题,然后用选择语句。分别执行第一次,第二次,第三次和第四次运算。然后用eval函数解决运算级优先问题。平时只看看书,很难发现有的问题,多写代码,才能发现更多的问题。以后多注意一下实际操作,而不是纸上谈兵。