You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.2 KiB
37 lines
1.2 KiB
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
/**
|
|
* 生成初中题目
|
|
*/
|
|
public class JuniorProblem implements ProblemsGenerator {
|
|
private static final Random RANDOM = new Random();
|
|
private final BracketManager bracketManager = new BracketManager();
|
|
private final PowerManager powerManager = new PowerManager();
|
|
private final ExpressionBuilder expressionBuilder = new ExpressionBuilder();
|
|
|
|
@Override
|
|
public String generate() {
|
|
String expression;
|
|
boolean hasPower;
|
|
do {
|
|
int numCount = RANDOM.nextInt(5) + 1;
|
|
expression = expressionBuilder.generateBasicExpression(numCount);
|
|
List<Integer> numPositions = expressionBuilder.getNumberPositions(expression);
|
|
|
|
if (RANDOM.nextDouble() < 0.8) {
|
|
int pairs = bracketManager.decideParenthesesPairs(numCount);
|
|
if (pairs > 0) {
|
|
expression = bracketManager.addParentheses(expression, pairs, numPositions);
|
|
}
|
|
}
|
|
|
|
// 添加幂运算并检查添加是否成功
|
|
expression = powerManager.addPowerOperations(expression, numPositions);
|
|
hasPower = expression.contains("^2") || expression.contains("√");
|
|
} while (expressionBuilder.hasDivideByZero(expression) || !hasPower);
|
|
|
|
return expression;
|
|
}
|
|
}
|