java四则运算随机产生式

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

  

一、需求分析

  1. 程序接受一个输入参数n
  2. 随机产生n道四则运算题
  3. 运算数要求为:0和100之间
  4. 运算符要求为:3到5个之间
  5. 每个四则运算式中不能出现负数与小数
  6. 将最终产生的结果存储到txt文件中    

二、功能设计

  1. 程序接受一个随机数number(3=<number<=5),随机产生number运算数与运算符。
  2. 程序由接受的n确定产生的运算式数量
  3. 程序将接受的运算数与运算符随机组合产生运算式
  4. 输出结果并将其存储到result.txt文件中

三、设计实现

  1. 编写程序,接受一个数N,确定产生运算式的数量
  2. 产生随机数number(3到5之间),产生运算数与运算符
  3. 随机组合运算式与运算符,产生运算式
  4. 判断运算式是否合法,若不合法,将其进行修改
  5. 打印输出结果至result.txt文件

四、测试运行

窗口运行结果:

测试结果存储至result.txt文件中:

 

 

 

五、核心代码

 1        //存储运算符
 2             for(int j=0;j<arr_str.length;j++) {
 3                 if(arr_str[j]=='+'||arr_str[j]=='-'||arr_str[j]=='*'||arr_str[j]=='/') {    
 4                     arrString=String.valueOf(arr_str[j]);
 5                     arr_str[j]=',';
 6                     arrslist1.add(arrString);
 7                 }
 8             }
 9             //存储运算数
10             String s = new String(arr_str);
11             String[] ss = s.split(",");
12             for(int k=0;k<ss.length;k++) {
13                 arrslist2.add(ss[k]);
14             }
15             //生成运算式
16             String[] arrs1 = arrslist1.toArray(new String[arrslist1.size()]);//运算符
17             String[] arrs2 = arrslist2.toArray(new String[arrslist2.size()]);//运算数
18             
19             for(int m=0;m<arrs1.length;m++){
20                 arrslist.add(arrs2[m]);//运算数
21                 arrslist.add(arrs1[m]);//运算符
22             }
23             arrslist.add(arrs2[arrs2.length-1]);
24             String[] arrs = arrslist.toArray(new String[arrslist2.size()]);//运算式

//存储运算式
    //封装目的地
    public static void filewriter(ArrayList<String> arithList) throws IOException {
        //封装存储位置
        BufferedWriter BufferedWriterbw = new BufferedWriter(new FileWriter("result.txt"));
          BufferedWriterbw.write("201571030139");
          BufferedWriterbw.newLine();
          for(String s : arithList){
                //写数据
              try {
                BufferedWriterbw.write(s+"="+js.eval(s));
            } catch (ScriptException e) {
                e.printStackTrace();
            }
              BufferedWriterbw.newLine();
              BufferedWriterbw.flush();
          }
    }
    

 

    //判断是否产生负数与小数
    public static void  check_arith(String arr[]){
        for(int i=0;i<arr.length;i++){
            //判断是否产生负数    
            if(arr[i].contains("-")){
                if(Integer.valueOf(arr[i-1])<Integer.valueOf(arr[i+1])){
                    arr[i]="+";
                }
            }
            //判断是否产生小数
            if(arr[i].contains("/")){
                int a = Integer.valueOf(arr[i-1]);
                int b = Integer.valueOf(arr[i+1]);
                int x = a%b;
                if(x!=0){
                    arr[i]="+";
                }
            }
        }
    }

 

六、总结

在本次的四则运算程序的设计与编写当中,我严格按照项目设计的一般步骤,有次序的进行程序的设计与编写,比起以前的拿到题目就编写程序的方式,节省了许多时间。再就是说一下本次的程序的难点:在产生运算式后,如何去判断再运算中是否产生了负数与小数,在出现之后如何将其转变的合理。

七、展示PSP

PSP2.1

任务内容

计划完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

20

30

·       Estimate

·  估计这个任务需要多少时间,并规划大致工作步骤

20

30

Development

开发

131

255

··       Analysis

  需求分析 (包括学习新技术)

10

10

·       Design Spec

·  生成设计文档

5

10

·       Design Review

·  设计复审 (和同事审核设计文档)

3

6

·       Coding Standard

  代码规范 (为目前的开发制定合适的规范)

3

4

·       Design

  具体设计

10

15

·       Coding

  具体编码

80

200

·       Code Review

·  代码复审

10

10

·       Test

·  测试(自我测试,修改代码,提交修改)

10

10

Reporting

报告

32

52

··       Test Report

·  测试报告

20

40

·       Size Measurement

  计算工作量

2

2

·       Postmortem & Process Improvement Plan

·  事后总结 ,并提出过程改进计划

10

10

 

  • Github地址:https://github.com/gzyt/Arithmetic

 

posted @ 2018-03-19 20:33  雪飞TT  阅读(1766)  评论(2编辑  收藏  举报