自动生成数学题型一 (框架Struts2) 题型如(a+b=c)
1. 加减乘除
1.1 随机生成制定范围的整数
/**
* 随机产生一个被限定范围的整数
*
* @param num1
* 定义起始范围 num1
* @param num2
* 定义终止范围 num2
* @return 返回一个 num1 到num2 之间的随机整数数值,且num1<num2
*
*/ public static int generate(int num1, int num2) {
boolean i = num1 <= num2;
int k = -1;
// 如果i为true,即num1<num2,返回num1到num2之间的值,否则返回-1;
if (i == true)
k = (int) (Math.random() * (num2 - num1 + 1)) + num1;
return k; }
1.2 加法运算
/**
* 加法运算,生成加数、被加数和和组成的数组
*
* @param num1
* 定义起始范围 num1
* @param num2
* 定义终止范围 num2
* @return 返回数组add,包括加数,被加数,和随机生成的第一个数与第二个整数的和, 此两个整数在num1 和num2之间
*/ public static double[] addition(int num1, int num2) {
int first = generate(num1, num2);// 随机生成的第一个整数(加数)
int secound = generate(num1, num2);// 随机生成的第二个整数(被家数)
int result = first + secound;// 第一个整数与第二个整数相加得到的整数
double[] add = new double[] { first, secound, result, 0, 0 };
return add;
}
1.3 减法运算
/**
* 减法运算,生成减数、被减数和差组成的数组
*
* @param num1
* 定义起始范围 num1
* @param num2
* 定义终止范围 num2
* @return 返回数组sub[],包括减数,被减数,和第二个随机生成的数值减去第一个随机生成的数值的差
* (第一个生成数值大于第二个生成数值,此两个整数在num1 和num2之间)
*
*/
public static double[] subtraction(int num1, int num2) {
int first = generate(num1, num2);// 随机生成的第一个数(减数)
int secound = generate(first, num2);// 随机生成的第二个数(被减数)
int result = secound - first;// 第二个随机生成的数值减去第一个随机生成的数值的值
double[] sub = new double[] { secound, first, result, 0, 1 };
return sub;
}
1.4 乘法运算
/**
* 乘法运算,生成乘数、被乘数和积组成的数组
*
* @param num1
* 定义起始范围 num1
* @param num2
* 定义终止范围 num2
* @return 返回数组,包括乘数,被乘数和随机生成的数的积此(此两个整数在num1 和num2之间
*/ public static double[] multiplication(int num1, int num2) {
int first = generate(num1, num2);// 随机生成的第一个整数(乘数)
int secound = generate(num1, num2);// 随机生成的第二个整数(被乘数)
int result = first * secound;// 第一个整数与第二个整数相加得到的整数
double[] mult = new double[] { first, secound, result, 0, 3 };
return mult; }
1.5 除法运算
/**
* 除法运算,返回除数、被除数和商数组成的数组
*
* @param num1
* 定义起始范围 num1
* @param num2
* 定义终止范围 num2
* @return
*/ public static double[] division2(int num1, int num2) {
double first = generate(num1, num2);// 随机生成的第一个整数(除数)
double secound = generate((int)first, num2);// 随机生成的第二个整数(被除数)
double result = secound / first;
double[] div2 = new double[] { secound, first, result, 0, 4 };
return div2;
}
1.6 求余运算
/**
* 除法求余数运算,生成除数、被除数、积和余数组成的数组
*
* @param num1
* 定义起始范围 num1
* @param num2
* 定义终止范围 num2
* @return 返回数组div,包阔除数,被除数,余数和随机生成的数两个数的商(随机生成的数第一个大于第二个数)
*/
public static double[] division(int num1, int num2) { int first = generate(num1, num2);// 随机生成的第一个整数(除数)
int secound = generate(first, num2);// 随机生成的第二个整数(被除数)
int result = secound / first;
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 根据题目类型和数量生成题目
/**
* judge方法,处理参数,并形成新的list集合的对象
*
* @param exerciseNumber
* 习题数量
* @param exerciseType
* 习题种类(加减乘除)
* @param num5
* 起始数值
* @param num6
* 结束数值
* @return 返回list集合
*/ public List<Number3> judge(int exerciseNumber, int exerciseType, int num5, int num6) {
final int num1 = 0;
final int num2 = 1;
final int num3 = 2;
final int num4 = 3;
final int num7 = 4;
final int num8 = 5;
List<Number3> exercise = new ArrayList<Number3>();
Number3 number = null;
switch (exerciseType) {
case num1:
for (int i = 0; i < exerciseNumber; i++) {
double[] sub = subtraction(num5, num6);
number = new Number3();
number.setNum1((int) sub[0]);
number.setNum2((int) sub[1]);
number.setNum3(String.format("%.0f", sub[2]));
number.setNumType("-");
number.setSymbol("=");
exercise.add(number);
}
return exercise;
case num2:
for (int i = 0; i < exerciseNumber; i++) {
double[] add = addition(num5, num6);
number = new Number3();
number.setNum1((int) add[0]);
number.setNum2((int) add[1]);
number.setNum3(String.format("%.0f", add[2]));
number.setNumType("+");
number.setSymbol("=");
exercise.add(number);
}
return exercise;
case num3:
for (int i = 0; i < exerciseNumber; i++) {
double[] mult = multiplication(num5, num6);
number = new Number3();
number.setNum1((int) mult[0]);
number.setNum2((int) mult[1]);
number.setNum3(String.format("%.0f", mult[2]));
number.setNumType("*");
number.setSymbol("=");
exercise.add(number);
System.out.println(exercise);
}
return exercise;
case num4:
for (int i = 0; i < exerciseNumber; i++) {
double[] div = division(num5, num6);
number = new Number3();
number.setNum1((int) div[0]);
number.setNum2((int) div[1]);
number.setNum3(String.format("%.0f", div[2]));
number.setNum4(String.format("%.0f", div[3]));
number.setNumType("/");
number.setSymbol("=");
exercise.add(number);
}
return exercise;
case num7:
for (int i = 0; i < exerciseNumber; i++) {
double[] fourexercise = fourExercise(num5, num6);
number = new Number3();
System.out.println(exerciseType + "exerciseType");
if (fourexercise[4] == 0) {
number.setNum1((int) fourexercise[0]);
number.setNum2((int) fourexercise[1]);
number.setNum3(String.format("%.0f", fourexercise[2]));
number.setNumType("-");
number.setSymbol("=");
} else if (fourexercise[4] == 1) {
number.setNum1((int) fourexercise[0]);
number.setNum2((int) fourexercise[1]);
number.setNum3(String.format("%.0f", fourexercise[2]));
number.setNumType("+");
number.setSymbol("=");
} else if (fourexercise[4] == 2) {
number.setNum1((int) fourexercise[0]);
number.setNum2((int) fourexercise[1]);
number.setNum3(String.format("%.0f", fourexercise[2]));
number.setNumType("*");
number.setSymbol("=");
} else {
number.setNum1((int) fourexercise[0]);
number.setNum2((int) fourexercise[1]);
number.setNum3(String.format("%.6f", fourexercise[2]));
number.setNum4(String.format("%.6f", fourexercise[3]));
number.setNumType("/");
number.setSymbol("=");
}
exercise.add(number);
}
return exercise;
case num8:
Number3 number2 = null;
for (int i = 0; i < exerciseNumber; i++) {
double[] div2 = division2(num5, num6);
number2 = new Number3();
number2.setNum1((int) div2[0]);
number2.setNum2((int) div2[1]);
number2.setNum3(String.format("%.6f", div2[2]));
number2.setNumType("/");
number2.setSymbol("=");
exercise.add(number2);
}
System.out.println(exercise);
return exercise;
default:
break;
}
return null;
}
2.2 实体类Number3
public class Number3 {
private int num1;
private int num2;
private String num3;
private String num4;
private String numType;
private String symbol;
.....
//此处省略set和get方法
}
2.3 action类
public class Exercise {
private String exerciseType;
private String min;
private String max;
private String exerciseNumber; ......
//此处省略get和set方法 public String execute() {
ActionContext actioncontext = ActionContext.getContext();
Map<String, Object> session = actioncontext.getSession();
count cou = new count();
List<Number3> exercise = cou.judge(Integer.valueOf(exerciseNumber), Integer.valueOf(exerciseType),
Integer.valueOf(min), Integer.valueOf(max));
session.put("exercises", exercise);
session.put("exerciseType",exerciseType);
if (exerciseType.equals("3")) {
return "d";
} else {
return "asm";
}
}
}
3. 运行结果截图
3.1 初始页面
3.2用户输入题目数量和题型
3.3生成题目页面
3.4 尝试填写结果
3.5检测运行结果(检测代码会在之后)
自动生成数学题型一 (框架Struts2) 题型如(a+b=c)的更多相关文章
- 自动生成DTO(Sugar框架)
step1:启动api项目 step2:使用postman工具,填上接口地址http://localhost:7788/api/automapper/AutoMapperSuper step3:表格数 ...
- 自动生成数学题型三 (框架Struts2)题型如 a+b=c(a、b、c都为分数)
1. 约分分数 1.1 保留质数 /** * 将数值放入到fraction数组中 * @param fen 简要放的 int类型数值 */ public void fenshu(int fen) { ...
- 自动生成数学题型二(框架struts2)题型如((a+b)*c=d)
1. 生成题目 1.1 生成单个题目 public static String[] twoOperatorAndOperator(int num1, int num2) { double first ...
- 自动生成DTO(EF框架)
[0]安装相关工具包 PostgreSQL版本: Npgsql.EntityFrameworkCore.PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL ...
- 文件参数化-utp框架之根据yaml文件自动生成python文件+utp运行用例
根据yaml文件自动生成python文件 utp框架: bin目录:存放执行文件(run.py) cases目录:存放生成的用例的python文件(该目录下的文件为根据data目录下的测试用例生成的p ...
- Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据
一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 问题二 ...
- Spring Boot Swagger2自动生成接口文档
一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 1.问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 2 ...
- [goa]golang微服务框架学习(二)-- 代码自动生成
之前用过go语言的反射来做一些代码生成,参考这篇. 但是这种方式,入侵太强,需要执行对应的申明调用, 所以对GOA框架的自动生成非常感兴趣,于是仔细研究了一下,发现用的比较巧妙, 这里先卖个关子,先看 ...
- 为测试框架model类自动生成xml结果集
问题:有大量类似于theProductId这样名字的字符串需要转换成the_product_id这种数据库column名的形式. 思路:见到(见)大写字母(缝)就插入(插)一个“_”字符(针)进去,最 ...
随机推荐
- .NET 三层架构
三层架构简介: 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer).业务逻辑层(Business Lo ...
- Java面试08|Java重要的类和相关的方法
1.深入理解Class类及其中的方法 获取Class类的方法: 1.调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法.2.使用Class类的中静 ...
- HTML初学者常用标签及属性
1.HTML5头部结构 [DOCTYPE html] 声明文档类型为HTML5文件. 文档声明在HTML5文档必不可少,且必须放在文档的第一行. [meta标签] 1-charset属性:单独 ...
- KoaHub.js:使用ES6/7特性开发Node.js框架
KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, Async & ...
- node c++多线程插件 第二天 c++指针
虽然取名叫node多线程插件,但是目前还是在学习c++的情况. 今天谈一谈c++指针. c++指针就像是c#中的引用变量,例如一个Person类的实例zs{Name="张三",Ag ...
- JavaGUI版本销售管理系统
不知不觉中,本科阶段已经走过两个年头,诸多感慨,诸多向往,周遭的人和事物在不断的改变着,自己的目标也在不断改变,总之,世界一直在快速的发生着变化,快到我们无法捕捉,总的来说,过得很潇洒,就等考上研究生 ...
- 学学简单的-------------javaScript基础
首先知道什么是JavaScript? JavaScript是一种描述性语言,也是一种基于对象和事件驱动的.并具有安全性的脚本语言. 2.JavaScript由三部分组成:①ecmascript ②Bo ...
- final 、finally 和 finalize()的区别
1. final 是一个关键字.可以修饰数据.方法.类. 1)final 数据:final 用来修饰一个永不改变的编译时常量,或者运行时初始化但是不希望被改变的常量.一个既是 static又是 fin ...
- Android之XListView下拉刷新,更新网络美女图
一.简介: 下拉刷新是一种特定的手动刷新交互,和其他的同类操作不同的地方在于它采用了更加直觉的下拉操作,所以它的交互足够清晰明显. 下拉刷新主要用在类似ListView这样的控件,设计下拉刷新有三 ...
- 关于css+div布局的疑问 2017-03-19
第一次布局一个静态网页,发现许多细节都需要自己探索,出现诸如以下问题: 1.布局问题:经常出现一个div被挤出来?做到一半少一个div布局? 布局之前,要点打好框架,明确每个地方的高宽是多少,争取精确 ...