zoukankan      html  css  js  c++  java
  • 自动生成数学题型一 (框架Struts2) 题型如(a+b=c)

    1. 加减乘除

    1.1 随机生成制定范围的整数

     1 /**
     2      * 随机产生一个被限定范围的整数
     3      * 
     4      * @param num1
     5      *            定义起始范围 num1
     6      * @param num2
     7      *            定义终止范围 num2
     8      * @return 返回一个 num1 到num2 之间的随机整数数值,且num1<num2
     9      * 
    10      */
    11 
    12     public static int generate(int num1, int num2) {
    13         boolean i = num1 <= num2;
    14         int k = -1;
    15         // 如果i为true,即num1<num2,返回num1到num2之间的值,否则返回-1;
    16         if (i == true)
    17             k = (int) (Math.random() * (num2 - num1 + 1)) + num1;
    18         return k;
    19 
    20     }

    1.2 加法运算

     1 /**
     2      * 加法运算,生成加数、被加数和和组成的数组
     3      * 
     4      * @param num1
     5      *            定义起始范围 num1
     6      * @param num2
     7      *            定义终止范围 num2
     8      * @return 返回数组add,包括加数,被加数,和随机生成的第一个数与第二个整数的和, 此两个整数在num1 和num2之间
     9      */
    10 
    11     public static double[] addition(int num1, int num2) {
    12         int first = generate(num1, num2);// 随机生成的第一个整数(加数)
    13         int secound = generate(num1, num2);// 随机生成的第二个整数(被家数)
    14         int result = first + secound;// 第一个整数与第二个整数相加得到的整数
    15         double[] add = new double[] { first, secound, result, 0, 0 };
    16         return add;
    17     }

    1.3 减法运算

     1 /**
     2      * 减法运算,生成减数、被减数和差组成的数组
     3      * 
     4      * @param num1
     5      *            定义起始范围 num1
     6      * @param num2
     7      *            定义终止范围 num2
     8      * @return 返回数组sub[],包括减数,被减数,和第二个随机生成的数值减去第一个随机生成的数值的差
     9      *         (第一个生成数值大于第二个生成数值,此两个整数在num1 和num2之间)
    10      * 
    11      */
    12     public static double[] subtraction(int num1, int num2) {
    13         int first = generate(num1, num2);// 随机生成的第一个数(减数)
    14         int secound = generate(first, num2);// 随机生成的第二个数(被减数)
    15         int result = secound - first;// 第二个随机生成的数值减去第一个随机生成的数值的值
    16         double[] sub = new double[] { secound, first, result, 0, 1 };
    17         return sub;
    18     }

    1.4 乘法运算

     1 /**
     2      * 乘法运算,生成乘数、被乘数和积组成的数组
     3      * 
     4      * @param num1
     5      *            定义起始范围 num1
     6      * @param num2
     7      *            定义终止范围 num2
     8      * @return 返回数组,包括乘数,被乘数和随机生成的数的积此(此两个整数在num1 和num2之间
     9      */
    10 
    11     public static double[] multiplication(int num1, int num2) {
    12         int first = generate(num1, num2);// 随机生成的第一个整数(乘数)
    13         int secound = generate(num1, num2);// 随机生成的第二个整数(被乘数)
    14         int result = first * secound;// 第一个整数与第二个整数相加得到的整数
    15         double[] mult = new double[] { first, secound, result, 0, 3 };
    16         return mult;
    17 
    18     }

    1.5 除法运算

     1 /**
     2      * 除法运算,返回除数、被除数和商数组成的数组
     3      * 
     4      * @param num1
     5      *            定义起始范围 num1
     6      * @param num2
     7      *            定义终止范围 num2
     8      * @return
     9      */
    10 
    11     public static double[] division2(int num1, int num2) {
    12         double first = generate(num1, num2);// 随机生成的第一个整数(除数)
    13         double secound = generate((int)first, num2);// 随机生成的第二个整数(被除数)
    14         double result = secound / first;
    15         double[] div2 = new double[] { secound, first, result, 0, 4 };
    16         return div2;
    17     }

    1.6 求余运算

     1 /**
     2      * 除法求余数运算,生成除数、被除数、积和余数组成的数组
     3      * 
     4      * @param num1
     5      *            定义起始范围 num1
     6      * @param num2
     7      *            定义终止范围 num2
     8      * @return 返回数组div,包阔除数,被除数,余数和随机生成的数两个数的商(随机生成的数第一个大于第二个数)
     9      */
    10     public static double[] division(int num1, int num2) {
    11 
    12         int first = generate(num1, num2);// 随机生成的第一个整数(除数)
    13         int secound = generate(first, num2);// 随机生成的第二个整数(被除数)
    14         int result = secound / first;
    15         int remainder = secound % first;
    16         double[] div = new double[] { secound, first, result, remainder, 5 };
    17         return div;
    18     }

    1.7 加减乘除四种随机生成

    /**
         * 随机生成加、减、乘、除四种的数组
         * 
         * @param num5
         *            定义起始范围 num5
         * @param num6
         *            定义终止范围 num6
         * @return 随机生成的一组数组
         */
    
        public static double[] fourExercise(int num5, int num6) {
            final int num1 = 0;
            final int num2 = 1;
            final int num3 = 2;
            final int num4 = 3;
            int num = generate(num1, num4);
            switch (num) {
            case num1:
                double[] sub = subtraction(num5, num6);
                return sub;
            case num2:
                double[] add = addition(num5, num6);
                return add;
            case num3:
                double[] mult = multiplication(num5, num6);
                return mult;
            case num4:
                double[] div = division2(num5, num6);
                return div;
            default:
                break;
            }
            return null;
        }

    2.判断处理

    2.1 根据题目类型和数量生成题目

      1 /**
      2      * judge方法,处理参数,并形成新的list集合的对象
      3      * 
      4      * @param exerciseNumber
      5      *            习题数量
      6      * @param exerciseType
      7      *            习题种类(加减乘除)
      8      * @param num5
      9      *            起始数值
     10      * @param num6
     11      *            结束数值
     12      * @return 返回list集合
     13      */
     14 
     15     public List<Number3> judge(int exerciseNumber, int exerciseType, int num5, int num6) {
     16         final int num1 = 0;
     17         final int num2 = 1;
     18         final int num3 = 2;
     19         final int num4 = 3;
     20         final int num7 = 4;
     21         final int num8 = 5;
     22         List<Number3> exercise = new ArrayList<Number3>();
     23         Number3 number = null;
     24         switch (exerciseType) {
     25         case num1:
     26             for (int i = 0; i < exerciseNumber; i++) {
     27                 double[] sub = subtraction(num5, num6);
     28                 number = new Number3();
     29                 number.setNum1((int) sub[0]);
     30                 number.setNum2((int) sub[1]);
     31                 number.setNum3(String.format("%.0f", sub[2]));
     32                 number.setNumType("-");
     33                 number.setSymbol("=");
     34                 exercise.add(number);
     35             }
     36             return exercise;
     37         case num2:
     38             for (int i = 0; i < exerciseNumber; i++) {
     39                 double[] add = addition(num5, num6);
     40                 number = new Number3();
     41                 number.setNum1((int) add[0]);
     42                 number.setNum2((int) add[1]);
     43                 number.setNum3(String.format("%.0f", add[2]));
     44                 number.setNumType("+");
     45                 number.setSymbol("=");
     46                 exercise.add(number);
     47             }
     48             return exercise;
     49         case num3:
     50             for (int i = 0; i < exerciseNumber; i++) {
     51                 double[] mult = multiplication(num5, num6);
     52                 number = new Number3();
     53                 number.setNum1((int) mult[0]);
     54                 number.setNum2((int) mult[1]);
     55                 number.setNum3(String.format("%.0f", mult[2]));
     56                 number.setNumType("*");
     57                 number.setSymbol("=");
     58                 exercise.add(number);
     59                 System.out.println(exercise);
     60             }
     61             return exercise;
     62         case num4:
     63             for (int i = 0; i < exerciseNumber; i++) {
     64                 double[] div = division(num5, num6);
     65                 number = new Number3();
     66                 number.setNum1((int) div[0]);
     67                 number.setNum2((int) div[1]);
     68                 number.setNum3(String.format("%.0f", div[2]));
     69                 number.setNum4(String.format("%.0f", div[3]));
     70                 number.setNumType("/");
     71                 number.setSymbol("=");
     72                 exercise.add(number);
     73             }
     74             return exercise;
     75         case num7:
     76             for (int i = 0; i < exerciseNumber; i++) {
     77                 double[] fourexercise = fourExercise(num5, num6);
     78                 number = new Number3();
     79                 System.out.println(exerciseType + "exerciseType");
     80                 if (fourexercise[4] == 0) {
     81                     number.setNum1((int) fourexercise[0]);
     82                     number.setNum2((int) fourexercise[1]);
     83                     number.setNum3(String.format("%.0f", fourexercise[2]));
     84                     number.setNumType("-");
     85                     number.setSymbol("=");
     86                 } else if (fourexercise[4] == 1) {
     87                     number.setNum1((int) fourexercise[0]);
     88                     number.setNum2((int) fourexercise[1]);
     89                     number.setNum3(String.format("%.0f", fourexercise[2]));
     90                     number.setNumType("+");
     91                     number.setSymbol("=");
     92                 } else if (fourexercise[4] == 2) {
     93                     number.setNum1((int) fourexercise[0]);
     94                     number.setNum2((int) fourexercise[1]);
     95                     number.setNum3(String.format("%.0f", fourexercise[2]));
     96                     number.setNumType("*");
     97                     number.setSymbol("=");
     98                 } else {
     99                     number.setNum1((int) fourexercise[0]);
    100                     number.setNum2((int) fourexercise[1]);
    101                     number.setNum3(String.format("%.6f", fourexercise[2]));
    102                     number.setNum4(String.format("%.6f", fourexercise[3]));
    103                     number.setNumType("/");
    104                     number.setSymbol("=");
    105                 }
    106                 exercise.add(number);
    107             }
    108             return exercise;
    109         case num8:
    110             Number3 number2 = null;
    111             for (int i = 0; i < exerciseNumber; i++) {
    112                 double[] div2 = division2(num5, num6);
    113                 number2 = new Number3();
    114                 number2.setNum1((int) div2[0]);
    115                 number2.setNum2((int) div2[1]);
    116                 number2.setNum3(String.format("%.6f", div2[2]));
    117                 number2.setNumType("/");
    118                 number2.setSymbol("=");
    119                 exercise.add(number2);
    120             }
    121             System.out.println(exercise);
    122             return exercise;
    123         default:
    124             break;
    125         }
    126         return null;
    127     }

    2.2 实体类Number3

     1    public class Number3 {
     2        private int num1;
     3        private int num2;
     4        private String num3;
     5        private String num4;
     6        private String numType;
     7        private String symbol;
     8        .....
     9     //此处省略set和get方法
    10  }

    2.3 action类

     1 public class Exercise {
     2     private String exerciseType;
     3     private String min;
     4     private String max;
     5     private String exerciseNumber;
     6 
     7     ......
     8   //此处省略get和set方法
     9 
    10 
    11     public String execute() {
    12         ActionContext actioncontext = ActionContext.getContext();
    13         Map<String, Object> session = actioncontext.getSession();
    14         count cou = new count();
    15         List<Number3> exercise = cou.judge(Integer.valueOf(exerciseNumber), Integer.valueOf(exerciseType),
    16                 Integer.valueOf(min), Integer.valueOf(max));
    17         session.put("exercises", exercise);
    18         session.put("exerciseType",exerciseType);
    19         if (exerciseType.equals("3")) {
    20             return "d";
    21         } else {
    22             return "asm";
    23         }
    24     }
    25 }

    3. 运行结果截图

    3.1 初始页面

    3.2用户输入题目数量和题型

    3.3生成题目页面

    3.4 尝试填写结果

    3.5检测运行结果(检测代码会在之后)

  • 相关阅读:
    大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 时序算法)
    大数据时代:基于微软案例数据库数据挖掘知识点总结(结果预测篇)
    svg图片的缩放拖拽
    计算机网络之以太网,通俗点的说法
    yield 与生成器
    安卓开发第一记 android stdio 安装后 新建测试项目报错
    Javascript的异常捕获机制
    小而实用的工具插件集锦(JQGrid,zTree)
    proxifier 注册码 +电脑全局代理设置
    雷林鹏分享:jsp 发送邮件
  • 原文地址:https://www.cnblogs.com/orchid9/p/6685128.html
Copyright © 2011-2022 走看看