java实现随机四则运算

使用JAVA编程语言,独立完成一个包含3到5个数字的四则运算练习,软件基本功能要求以下:javascript

  • 程序可接收一个输入参数n,而后随机产生n道加减乘除练习题,每一个数字在 0 和 100 之间,运算符在3个到5个之间。
  • 为了让小学生获得充分锻炼,每一个练习题至少要包含2种运算符。同时,因为小学生没有分数与负数的概念,你所出的练习题在运算过程当中不得出现负数与非整数,好比不能出 3/5+2=2.6,2-5+10=7等算式。
  • 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
  • 当程序接收的参数为4时,如下为输出文件示例。
2018010230
13+17-1=29
11*15-5=160
3+10+4=1
15/5+3-2=4

Github项目地址:java

https://github.com/dushik/Athmeticgit

需求分析:github

  • 经过程序接受一个数字,产生N道加减乘除练习题。
  • 判断传入参数是否合法
  • 每一个数字在0-100之间,运算符3-5个
  • 运算过程不能出现负数和非整数
  • 计算练习题
  • 全部信息输出到txt文件

功能设计:express

  • 编写主函数
  • 编写输入是否合法函数
  • 随机生成运算式
  • 编写计算运算式函数
  • 结果写入txt辅助类

设计实现:编程

  • 编写主函数并经过命令行接收参数
  • 判断传入参数是否合法
  • 随机选择加减乘除运算符
  • 根据产生运算符的个数生成必定运算数的运算式并存入List集合
  • 当随机产生的运算符是“/”时,判断被除数是否能整除除数,若是不能,随机产生可以被整除的除数。
  • 遍历List集合经过函数计算集合中每一个运算式的结果
  • 编写写入txt文件函数

测试运行:dom

核心代码:编程语言

随机产生num个运算式,并将产生的运算式存入List集合ide

char[] operator=new char[]{'+','-','*','/'};
Random random=new Random();
ArrayList<String> expression=new ArrayList<String>();
for(int i=0;i<num;i++){
    int n=random.nextInt(3)+3; //3-5个运算符
    int[] number=new int[n+1]; 
    String ex=new String();
    for(int j=0;j<=n;j++){
        number[j]=random.nextInt(100)+1; //4-5个数字
    }
    for(int j=0;j<n;j++){
        int s=random.nextInt(4);//随机选择某个运算符
        ex+=String.valueOf(number[j])+String.valueOf(operator[s]);///5+4+6+9
        if(s==3){number[j+1]=decide(number[j],number[j+1]);}
    }
    ex+=String.valueOf(number[n]);
    expression.add(ex);
}

当被除数不能整除除数时,随机生成可以整除的除数函数

/**
 * 随即取x,y为1-100之间,x能够整除y的y值
 * @param x
 * @param y
 * @return
 */
private static int decide(int x,int y){//经过递归实现整除
    Random random=new Random();
    if(x%y!=0){
        y=random.nextInt(100)+1;
        return decide(x,y);
    }
    else{
        return y; 
    }
}

经过javascript的eval函数计算字符串内的运算式

/**
 * 计算每一个等式的结果,并返回运算式
 * @param arrayList 
 * @return arrayList
 */
static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");  
private static ArrayList<String> calculate(ArrayList<String> arrayList){
    ArrayList<String> ArithExpress=new ArrayList<String>();
    for(String ax:arrayList){
        try {
            ax=ax+"="+jse.eval(ax);
            System.out.println(ax);
            ArithExpress.add(ax);
        } catch (ScriptException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return ArithExpress;
}

总结:

本程序的主要难点在于运算式的随机生成和运算式的计算,后者借助于Javascript的eval函数经过求解字符串内的运算式获得解决,编程重点解决随机生成运算式部分

PSP:

PSP 任务内容 计划完成须要的时间(min) 实际完成须要的时间(min)
计划 10 12
Estimate 需求分析,函数实现 10 10
开发 30 30
Analysis 需求分析 5 10
Design Spec 设计 5 5
Design Review 设计复审 2 2
Design 具体设计 5 5
Coding 具体编码 20 20
Code Review 代码复审,查找语法错误 2 2
Test 测试 5 5
报告 10 10
Test Report 经测试,程序编译正确,运行结果正确,彻底符合要求 2 2
Size Measurement 因为程序功能较为简单,需求分析的工做量很小,故本次实验的主要工做主要在于编程 2 2
Postmortem 对于此程序,计算部分还有大的改进空间,能够采用将中缀表达式转换为后缀表达式,经过正则判断运算符优先级来实现算式的结果,而不是另辟他法调用Javascript函数 2 2
相关文章
相关标签/搜索