From c7c549d11f6674c7c713cd121816d5bcc40c59e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=8D=9A=E6=96=87?= <15549487+FX_YBW@user.noreply.gitee.com> Date: Thu, 25 Sep 2025 10:45:08 +0800 Subject: [PATCH] =?UTF-8?q?test4=E5=B0=8F=E5=AD=A6=E3=80=81=E5=88=9D?= =?UTF-8?q?=E4=B8=AD=E9=A2=98=E5=9E=8B=E8=A7=A3=E8=80=A6=E5=8F=8A=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=97=A0=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/JuniorHighGenerator.java | 78 ++++++++++--------- 1 file changed, 43 insertions(+), 35 deletions(-) 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; + } }