diff --git a/src/SeniorProblem.java b/src/SeniorProblem.java index fe22fe5..8b6f9e2 100644 --- a/src/SeniorProblem.java +++ b/src/SeniorProblem.java @@ -15,27 +15,27 @@ public class SeniorProblem implements ProblemsGenerator { public String generate() { String expression; boolean hasTrig; + do { + // 生成基础表达式并添加括号 int numCount = RANDOM.nextInt(5) + 1; expression = expressionBuilder.generateBasicExpression(numCount); - List numPositions = expressionBuilder.getNumberPositions(expression); + expression = bracketManager.addNestedParentheses(expression); - if (RANDOM.nextDouble() < 0.8) { - int pairs = bracketManager.decideParenthesesPairs(numCount); - if (pairs > 0) { - expression = bracketManager.addParentheses(expression, pairs, numPositions); - } - } + // 获取初始数字位置 + List numPositions = expressionBuilder.getNumberPositions(expression); - // 添加三角函数并检查是否存在 + // 添加三角函数并重新获取数字位置 expression = trigManager.addTrigOperations(expression, numPositions); - List trigPositions = expressionBuilder.getNumberPositions(expression); - hasTrig = expression.contains("sin") || expression.contains("cos") || expression.contains("tan"); + List numPositionsAfterTrig = expressionBuilder.getNumberPositions(expression); - // 40% 概率加幂运算,避免与 trig 重叠 - if (RANDOM.nextDouble() < 0.4) { - expression = powerManager.addPowerOperationsAvoid(expression, numPositions, trigPositions); + // 判断是否包含三角函数 + hasTrig = expression.contains("sin") || expression.contains("cos") || expression.contains("tan"); + // 添加幂运算,50%概率执行 + if (RANDOM.nextDouble() < 0.5) { + expression = powerManager.addPowerOperations(expression, numPositionsAfterTrig, null); } + } while (expressionBuilder.hasDivideByZero(expression) || !hasTrig); return expression;