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函数解决运算级优先问题。平时只看看书,很难发现有的问题,多写代码,才能发现更多的问题。以后多注意一下实际操作,而不是纸上谈兵。

posted @ 2018-03-25 22:01  Rainoob  阅读(126)  评论(1编辑  收藏  举报