自动生成数学题型一 (框架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名的形式. 思路:见到(见)大写字母(缝)就插入(插)一个“_”字符(针)进去,最 ...
随机推荐
- 关于开发中使用writeToFile时的注意事项
总会有一些坑在前面等着你 我们先来看一下后台返回的部分json数据,稍后再来分析问题,仔细看一下userId和userCode两个字段,其他不用看 "list": [{ " ...
- rpm的用法
rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装.查询.卸载.升级等工作.但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时. yum基於RPM ...
- UI培训就业会很难吗
众所周知UI是研究人机交互的学科,他是从互联网发展而来的,单从目前它的应用领域来看,主要应用于软件.互联网.移动智能设备.游戏和虚拟现实影音方面.这些都是新兴的热门方向和活跃领域.目前人才缺口和社会需 ...
- Linux usb子系统(一) _写一个usb鼠标驱动
USB总线是一种典型的热插拔的总线标准,由于其优异的性能几乎成为了当下大小设备中的标配. USB的驱动可以分为3类:SoC的USB控制器的驱动,主机端USB设备的驱动,设备上的USB Gadget驱动 ...
- 通过JS将BSAE64生成图片并下载
HTML:<div style="display:block;margin:0 auto;width:638px;height:795px;"><div id=& ...
- UVa1587 盒子
前言 第一次刷题,ac的感觉真的很棒! 题目 题目 大意是说,输入6个面,判断是否是个长方体. 思路 根据长方体的特质来判断,比如说6个面中3个面是相互对应的,只有3条不同的边等等. 我就知道我肯定会 ...
- 用stm32f0x建立新的工程重要步骤
stm32f10x系列新建空的工程主要原理: 1.添加启动文件 不同的芯片类型的启动文件的容量是不同的,选择适合该芯片的容量作为启动文件. 注意:启动文件是汇编语言编写的,所以文件的后缀名为.s 2. ...
- KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架之koahub-handlebars
koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...
- UIImagePickerController拍照/相册/录像/本地视频
1.导入系统库 #import <MobileCoreServices/MobileCoreServices.h> 2.遵守协议 <UIImagePickerControllerDe ...
- virtualBox,webstorm,开虚拟机传代码
一起git一个新技能 利用virtualBOX在本地开一个虚拟机,然后设置webstorm连接到虚拟机,将代码传到虚拟机里. 以下详细讲解: 第一步: 第二步:管理虚拟机的设置(我是用的是Xshell ...