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)的更多相关文章

  1. 自动生成DTO(Sugar框架)

    step1:启动api项目 step2:使用postman工具,填上接口地址http://localhost:7788/api/automapper/AutoMapperSuper step3:表格数 ...

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

    1. 约分分数 1.1 保留质数 /** * 将数值放入到fraction数组中 * @param fen 简要放的 int类型数值 */ public void fenshu(int fen) { ...

  3. 自动生成数学题型二(框架struts2)题型如((a+b)*c=d)

    1. 生成题目 1.1 生成单个题目 public static String[] twoOperatorAndOperator(int num1, int num2) { double first ...

  4. 自动生成DTO(EF框架)

    [0]安装相关工具包 PostgreSQL版本: Npgsql.EntityFrameworkCore.PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL ...

  5. 文件参数化-utp框架之根据yaml文件自动生成python文件+utp运行用例

    根据yaml文件自动生成python文件 utp框架: bin目录:存放执行文件(run.py) cases目录:存放生成的用例的python文件(该目录下的文件为根据data目录下的测试用例生成的p ...

  6. Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据

    一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 问题二 ...

  7. Spring Boot Swagger2自动生成接口文档

    一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 1.问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 2 ...

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

    之前用过go语言的反射来做一些代码生成,参考这篇. 但是这种方式,入侵太强,需要执行对应的申明调用, 所以对GOA框架的自动生成非常感兴趣,于是仔细研究了一下,发现用的比较巧妙, 这里先卖个关子,先看 ...

  9. 为测试框架model类自动生成xml结果集

    问题:有大量类似于theProductId这样名字的字符串需要转换成the_product_id这种数据库column名的形式. 思路:见到(见)大写字母(缝)就插入(插)一个“_”字符(针)进去,最 ...

随机推荐

  1. .NET 三层架构

    三层架构简介: 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer).业务逻辑层(Business Lo ...

  2. Java面试08|Java重要的类和相关的方法

    1.深入理解Class类及其中的方法 获取Class类的方法: 1.调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法.2.使用Class类的中静 ...

  3. HTML初学者常用标签及属性

    1.HTML5头部结构   [DOCTYPE html] 声明文档类型为HTML5文件. 文档声明在HTML5文档必不可少,且必须放在文档的第一行.   [meta标签] 1-charset属性:单独 ...

  4. KoaHub.js:使用ES6/7特性开发Node.js框架

    KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, Async & ...

  5. node c++多线程插件 第二天 c++指针

    虽然取名叫node多线程插件,但是目前还是在学习c++的情况. 今天谈一谈c++指针. c++指针就像是c#中的引用变量,例如一个Person类的实例zs{Name="张三",Ag ...

  6. JavaGUI版本销售管理系统

    不知不觉中,本科阶段已经走过两个年头,诸多感慨,诸多向往,周遭的人和事物在不断的改变着,自己的目标也在不断改变,总之,世界一直在快速的发生着变化,快到我们无法捕捉,总的来说,过得很潇洒,就等考上研究生 ...

  7. 学学简单的-------------javaScript基础

    首先知道什么是JavaScript? JavaScript是一种描述性语言,也是一种基于对象和事件驱动的.并具有安全性的脚本语言. 2.JavaScript由三部分组成:①ecmascript ②Bo ...

  8. final 、finally 和 finalize()的区别

    1. final 是一个关键字.可以修饰数据.方法.类. 1)final 数据:final 用来修饰一个永不改变的编译时常量,或者运行时初始化但是不希望被改变的常量.一个既是 static又是 fin ...

  9. Android之XListView下拉刷新,更新网络美女图

    一.简介:   下拉刷新是一种特定的手动刷新交互,和其他的同类操作不同的地方在于它采用了更加直觉的下拉操作,所以它的交互足够清晰明显. 下拉刷新主要用在类似ListView这样的控件,设计下拉刷新有三 ...

  10. 关于css+div布局的疑问 2017-03-19

    第一次布局一个静态网页,发现许多细节都需要自己探索,出现诸如以下问题: 1.布局问题:经常出现一个div被挤出来?做到一半少一个div布局? 布局之前,要点打好框架,明确每个地方的高宽是多少,争取精确 ...