diff --git a/src/mathpuzzle/service/JuniorHighGenerator.java b/src/mathpuzzle/service/JuniorHighGenerator.java index 7ebb330..8665ab0 100644 --- a/src/mathpuzzle/service/JuniorHighGenerator.java +++ b/src/mathpuzzle/service/JuniorHighGenerator.java @@ -25,9 +25,8 @@ public class JuniorHighGenerator implements QuestionGenerator { private String generateSingleQuestion() { List parts = new ArrayList<>(); int operandCount = random.nextInt(4) + 2; - - parts = generateBase(operandCount, parts); - // 检测一下下面的循环是否加入了高级运算符,如果没有就启动保底 + parts = generateBase(operandCount, parts); + // hasAdvancedOp用以检测下面的循环是否加入了高级运算符,如果没有就启动保底 boolean hasAdvancedOp = false; if (operandCount > 2 && random.nextBoolean()) { // 遍历查找左括号的合理位置 @@ -36,47 +35,18 @@ public class JuniorHighGenerator implements QuestionGenerator { if (isNumeric(parts.get(i)) && random.nextBoolean()) { // 随机数看取出来的是不是开根号运算符 if("开根号".equals(ADVANCED_OPS[random.nextInt(ADVANCED_OPS.length)])) { - 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; - } - } - } - } + parts = generateRoot(parts, 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; - } - } - } + parts = generateSquare(parts, i); } hasAdvancedOp = true; break; } } } - // 强制加入一个高级运算符 + // 启动保底强制加入一个高级运算符 if(!hasAdvancedOp) { parts = forceAddAdvancedOp(parts); } @@ -104,4 +74,42 @@ public class JuniorHighGenerator implements QuestionGenerator { } return parts; } + + public List generateRoot(List 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 generateSquare(List 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; + } }