自动生成数学题型一 (框架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名的形式. 思路:见到(见)大写字母(缝)就插入(插)一个“_”字符(针)进去,最 ...
随机推荐
- 每天一个linux命令(34)--top命令
今天给领导发邮件,我这边虽然显示发出去了,但是他那边一直没收到,结果我以为我发了,他又一直在那边等结果.所以说,以后要另外发个信息或者QQ微信之类的说一声. top命令是Linux 下常用的性能分析工 ...
- Centos7 安装 zabbix3.2
简介: Zabbix的一个很优秀的分布式监控服务器, 它有两部分组成: 1. “zabbix-server”用来收集并且在web端展示数据 2. “zabbix-agent”用来采集数据,发送给ser ...
- UVALive 7045 Last Defence
ProblemK. Last Defence Description Given two integersA and B. Sequence S is defined as follow: • S0 ...
- 本地计算机上的XXX服务启动后停止,某些服务在未由其它服务或程序使用时将自动停止
创建WindowsService,以及安装和卸载网上的资料一搜一大堆,在这里就不再做演示,只说明下博主在工作中使用WindowsService服务出现的错误,以及最终的结局方案. 1.启动window ...
- 在.NET Core 上运行的 WordPress
在.NET Core 上运行的 WordPress,无需安装PHP既可跨平台运行WordPress. 在Peachpie中实现PHP所需的功能数月后,现在终于可以运行一个真实的应用程序:WordPre ...
- cocos2dx 中文路径编译错误记录
'/Q' 不是内部或外部命令,也不是可运行的程序1> 或批处理文件.1> 'y' 不是内部或外部命令,也不是可运行的程序1> 或批处理文件.1>C:\Program Files ...
- 基于Spring-WS的Restful API的集成测试
在很多Java企业级应用中,Spring占据了非常重要的位置,这就导致了基本上的技术选型都是围绕着Spring来, 比方说笔者最近的项目需要开发一个Restful的API接口,选型的时候就说,客户架构 ...
- PHP数据访问批量删除(10261101)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Redis命令总结及其基础知识讲述
1.redis的不同之处 Redis拥有其他数据库不具备的数据结构,又拥有内存存储(这使得redis的速度非常快),远程操作(使得redis可以与多个客户端和服务器进行连接).持久化(使得服务器可以在 ...
- JavaWeb之JSP技术总结
刚接触JSP技术的时候让我想起了在大学学的Asp+VBScript,记得当时我还用aspstudy做了一个小的新闻发布系统作为期末作品,也正是在那时候在卢哥卢老师的指导下走向编程的道路,对编程越来越感 ...