简单加减法算术题生成
控制 运算数值个数。计算数值: >0 and <目标值
需要批量生成的,再处理一下计算题重复问题。
import org.junit.Test;
import java.util.Random;
/**
* @author: Mr.裴
* @create 2020/3/26
* @Description: 小学加减法生成
**/
public class xxsTest {
//每道题的数字个数
public int numberNum = 3;
//运算类型 支持加法、减法、加减法混合
public CalculateType calculationMethod = CalculateType.MINGLE;
//数值范围
public int resultRange = 10;
// 单元测试
@Test
public void test() {
int[] nums = createNums();
String str = createStr(nums);
System.out.println(str);
}
public int[] createNums() {
//最后一位数为结果
int[] nums = new int[numberNum + 1];
//结果
int resultNum = 0;
for (int i = 0; i < numberNum; i++) {
boolean status = true; // true 加法
//判断加减法
if (calculationMethod == CalculateType.MINGLE)
status = random.nextInt(2) == 0;
else if (calculationMethod == CalculateType.AND)
status = true;
else if (calculationMethod == CalculateType.SUB)
status = false;
int num = random.nextInt(resultRange - 1) + 1;
if (!status) {
num = -num;
}
nums[i] = num;
resultNum += num;
if (resultNum < 0 || resultNum >= resultRange) {
return createNums();
}
}
//添加结果
nums[numberNum] = resultNum;
return nums;
}
private String createStr(int[] nums) {
StringBuilder sb = new StringBuilder();
//留空的下标
int index = random.nextInt(nums.length);
if (0 == index) {
sb.append(CalculateStr.BRACKETS.value);
} else {
sb.append(abs(nums[0]));
}
for (int i = 1; i < nums.length - 1; i++) {
sb.append(judgeSymbol(nums[i]));
if (i == index) {
sb.append(CalculateStr.BRACKETS.value);
} else {
sb.append(abs(nums[i]));
}
}
if (index == nums.length - 1) {
sb.append(CalculateStr.EQUAL.value).append(CalculateStr.BRACKETS.value);
} else {
sb.append(CalculateStr.EQUAL.value).append(nums[nums.length - 1]);
}
return sb.toString();
}
private String judgeSymbol(int num) {
return num < 0 ? CalculateStr.SUB.value : CalculateStr.AND.value;
}
private int abs(int num) {
return num < 0 ? -num : num;
}
private static Random random = new Random();
public enum CalculateType {
/**
* 加法
*/
AND,
/**
* 减法
*/
SUB,
/**
* 加减法混合
*/
MINGLE
}
private enum CalculateStr {
/**
* 加法
*/
AND(" + "),
/**
* 减法
*/
SUB(" - "),
/**
* 等于
*/
EQUAL(" = "),
/**
* 括号
*/
BRACKETS("( )");
/**
* value
*/
private final String value;
CalculateStr(String value) {
this.value = value;
}
}
}
结果示例:
9 - 4 + ( ) = 8