自动生成数学题型(框架Struts2)

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检测运行结果(检测代码会在之后)

时间: 2024-10-12 05:13:39

自动生成数学题型(框架Struts2)的相关文章

自动生成数学题型三 (框架Struts2)题型如 a+b=c(a、b、c都为分数)

1. 约分分数 1.1 保留质数 1 /** 2 * 将数值放入到fraction数组中 3 * @param fen 简要放的 int类型数值 4 */ 5 public void fenshu(int fen) { 6 fraction[i++] = fen; 7 } 1.2  定义int类型数组 1 /** 2 * 获得int 类型的数组,fraction对象 3 */ 4 public void getFraction() { 5 fraction = new int[nums]; 6

菜鸟学php扩展 之 自动生成的扩展框架详解(二)

前言 上一文:菜鸟学php扩展 之 hello world(一),不问所以然的,强行与php扩展say hello了.对于ext_skel自动生成的框架,将在本文进行详解,当作备忘录. 正文 ext_skel的用法 ./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]] [--skel=dir] [--full-xml] [--no-help] --extname=module module is the

php学习之道:php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正"办事"的那个,提供一种办事接口的统称. WSDL提供"能办的事的文档说明":  对要提供的服务的一种描述格式.我想帮你的忙,但是我要告诉你我都能干什么,以及干这些事情需要的参数类型. SOAP提供"请求"的规范:  向服务接口传递请求的格式,包括方法和参数等.你想让人家办事,总得告诉人家

Hibernate框架 —— 实体类的自动生成

一: hibernate框架 框架在一定程度上可以理解为一个半成品. Hibernate框架是对数据库进行操作,完成数据持久化得重任. 二: 配置 使用hibernate 需要先下载hibernate.如果要下载最新版的可以去官网下载,而对于历史版本,官网中好像很难找到,不过以下地址可是试试的哦! -> 3.0及以上版本 ->4.0及以上版本 不过在下使用的是3.3.2版本的.另外再说说各版本的意思:    rc 版--发布候选版,表示可能有bug,内容不会有很大的变动    ga 版--稳定

如何开发一个java开源框架-----Jvn框架之实现自动生成在线文档(第七讲)

一 . 前言:博主正在教大家如何开发一个javaEE框架,我把框架命名为Jvn,博客里有完整的开发视频,每一篇博文都是一个知识点: 关于框架的介绍和学习,可以从我博客第一讲开始看起,博客首页:http://www.cnblogs.com/everxs/ 本次内容视频以及源码下载地址:http://pan.baidu.com/s/1o6MJnFc 二. 本次博客讲的内容 场景:现在是APP时代,APP很热门,而且跟后台交互跑的都是HTTP协议,所以讲到这里,对于这里面的交互. 安卓工程师(客户端)

[goa]golang微服务框架学习(二)-- 代码自动生成

之前用过go语言的反射来做一些代码生成,参考这篇. 但是这种方式,入侵太强,需要执行对应的申明调用, 所以对GOA框架的自动生成非常感兴趣,于是仔细研究了一下,发现用的比较巧妙, 这里先卖个关子,先看看生成的代码目录结构. 这里使用adder的desgin文件来生成: package design import ( . "github.com/goadesign/goa/design" . "github.com/goadesign/goa/design/apidsl&quo

BJQA-IIATF1.0框架之《自动生成有效请求Json串》

2017年7月28日,今天是一个里程碑的日子,根据参数及数值通过结对有效算法自动生成字典形式的测试用例功能模块完成,鼓掌,鼓掌! 替换postdata模板内指定元素值的代码如下: 1 import copy 2 import createPWtestcase 3 dicta ={ 4 "H": { 5 "ACID": "aaaaa", 6 "Ver": ["aaaa","bbbb"],

框架-页面获取自动生成编号

页面获取自动生成编号方法        List<DataParam> parpams = new List<DataParam>();        parpams.Add(new DataParam("Code", "KT"));        parpams.Add(new DataParam("Count", "1"));        DbService.Instance().ExecuteF

制作新网络框架快速自动生成消息结构体的编辑器

这两天制作了一个自动生成代码脚本的窗体编辑器 目前还没有做过第一行可以选择生成的脚本类型,分请求消息和回应消息两种结构体脚本 第二行可以手动输入命名空间,第三行手动输入文件的名称,类名与文件名称相同 后面两个ID是消息的ID 下面的Popon的列表根据第一行选择脚本类型不同是变化的 选中string或者数组时会出现长度的输入框 输入好一条字段后点击Add New Field按钮可以添加下一条 当有大于一条字段的时候就可以生成脚本了,选一个路径将其保存 这行代码可以刷新Project文件夹,自动生