test4小学、初中题型解耦及功能无误

pull/1/head
杨博文 2 weeks ago
parent 32110cc5eb
commit c7c549d11f

@ -25,9 +25,8 @@ public class JuniorHighGenerator implements QuestionGenerator {
private String generateSingleQuestion() { private String generateSingleQuestion() {
List<String> parts = new ArrayList<>(); List<String> parts = new ArrayList<>();
int operandCount = random.nextInt(4) + 2; int operandCount = random.nextInt(4) + 2;
parts = generateBase(operandCount, parts); parts = generateBase(operandCount, parts);
// 检测一下下面的循环是否加入了高级运算符,如果没有就启动保底 // hasAdvancedOp用以检测下面的循环是否加入了高级运算符,如果没有就启动保底
boolean hasAdvancedOp = false; boolean hasAdvancedOp = false;
if (operandCount > 2 && random.nextBoolean()) { if (operandCount > 2 && random.nextBoolean()) {
// 遍历查找左括号的合理位置 // 遍历查找左括号的合理位置
@ -36,47 +35,18 @@ public class JuniorHighGenerator implements QuestionGenerator {
if (isNumeric(parts.get(i)) && random.nextBoolean()) { if (isNumeric(parts.get(i)) && random.nextBoolean()) {
// 随机数看取出来的是不是开根号运算符 // 随机数看取出来的是不是开根号运算符
if("开根号".equals(ADVANCED_OPS[random.nextInt(ADVANCED_OPS.length)])) { if("开根号".equals(ADVANCED_OPS[random.nextInt(ADVANCED_OPS.length)])) {
if(random.nextBoolean()) { parts = generateRoot(parts, i);
parts.set(i, "开根号(" + parts.get(i) + ")");
}
else {
parts.set(i, "开根号(" + parts.get(i));
// 为避免随机数上限出现0此处要单独判断一下左括号正好括住倒数第二个操作数的情况
if (i == parts.size() - 3) {
parts.set(parts.size() - 1, parts.get(parts.size() - 1) + ")");
} else {
while(true) {
int i2 = random.nextInt(parts.size() - 3 - i) + 2;
if(isNumeric(parts.get(i + i2))) {
parts.set(i + i2, parts.get(i + i2) + ")");
break;
}
}
}
}
} }
// 如果不是开根号就是平方运算 // 如果不是开根号就是平方运算
else { else {
parts.set(i, "(" + parts.get(i)); parts = generateSquare(parts, i);
// 为避免随机数上限出现0此处要单独判断一下左括号正好括住倒数第二个操作数的情况
if (i == parts.size() - 3) {
parts.set(parts.size() - 1, parts.get(parts.size() - 1) + ")");
} else {
while(true) {
int i2 = random.nextInt(parts.size() - 3 - i) + 2;
if(isNumeric(parts.get(i + i2))) {
parts.set(i + i2, parts.get(i + i2) + ")平方");
break;
}
}
}
} }
hasAdvancedOp = true; hasAdvancedOp = true;
break; break;
} }
} }
} }
// 强制加入一个高级运算符 // 启动保底强制加入一个高级运算符
if(!hasAdvancedOp) { if(!hasAdvancedOp) {
parts = forceAddAdvancedOp(parts); parts = forceAddAdvancedOp(parts);
} }
@ -104,4 +74,42 @@ public class JuniorHighGenerator implements QuestionGenerator {
} }
return parts; return parts;
} }
public List<String> generateRoot(List<String> parts, int i) {
if(random.nextBoolean()) {
parts.set(i, "开根号(" + parts.get(i) + ")");
} else {
parts.set(i, "开根号(" + parts.get(i));
// 为避免随机数上限出现0此处要单独判断一下左括号正好括住倒数第二个操作数的情况
if (i == parts.size() - 3) {
parts.set(parts.size() - 1, parts.get(parts.size() - 1) + ")");
} else {
while(true) {
int i2 = random.nextInt(parts.size() - 3 - i) + 2;
if(isNumeric(parts.get(i + i2))) {
parts.set(i + i2, parts.get(i + i2) + ")");
break;
}
}
}
}
return parts;
}
public List<String> generateSquare(List<String> parts, int i) {
parts.set(i, "(" + parts.get(i));
// 为避免随机数上限出现0此处要单独判断一下左括号正好括住倒数第二个操作数的情况
if (i == parts.size() - 3) {
parts.set(parts.size() - 1, parts.get(parts.size() - 1) + ")");
} else {
while(true) {
int i2 = random.nextInt(parts.size() - 3 - i) + 2;
if(isNumeric(parts.get(i + i2))) {
parts.set(i + i2, parts.get(i + i2) + ")平方");
break;
}
}
}
return parts;
}
} }

Loading…
Cancel
Save