Update JuniorProblem.java

pull/3/head
hnu202326010305 7 days ago
parent 4c0486861b
commit 04464953bf

@ -1,51 +1,36 @@
import java.util.List;
import java.util.Random;
/**
*
*/
public class JuniorProblem implements ProblemsGenerator {
private static final Random RANDOM = new Random();
private static final String[] OPERATORS = {"+", "-", "*", "/"};
private static final String[] POW_OPERATORS = {"√", "^2"};
private final BracketManager bracketManager = new BracketManager();
private final PowerManager powerManager = new PowerManager();
private final ExpressionBuilder expressionBuilder = new ExpressionBuilder();
@Override
public String generate() {
String primaryExpr = generatePrimaryExpression();
return addPowerOperators(primaryExpr);
}
private String generatePrimaryExpression() {
int count = RANDOM.nextInt(4) + 2;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
sb.append(RANDOM.nextInt(100) + 1);
if (i < count - 1) {
sb.append(" ").append(OPERATORS[RANDOM.nextInt(OPERATORS.length)]).append(" ");
}
}
return sb.toString();
}
private String addPowerOperators(String expr) {
String[] parts = expr.split(" ");
boolean hasPower = false;
for (int i = 0; i < parts.length; i++) {
if (parts[i].matches("\\d+") && (!hasPower || RANDOM.nextBoolean())) {
String op = POW_OPERATORS[RANDOM.nextInt(POW_OPERATORS.length)];
parts[i] = op.equals("√") ? "√" + parts[i] : parts[i] + "^2";
hasPower = true;
}
}
if (!hasPower) {
for (int i = 0; i < parts.length; i++) {
if (parts[i].matches("\\d+")) {
String op = POW_OPERATORS[RANDOM.nextInt(POW_OPERATORS.length)];
parts[i] = op.equals("√") ? "√" + parts[i] : parts[i] + "^2";
break;
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);
}
}
}
return String.join(" ", parts);
// 添加幂运算并检查添加是否成功
expression = powerManager.addPowerOperations(expression, numPositions);
hasPower = expression.contains("^2") || expression.contains("√");
} while (expressionBuilder.hasDivideByZero(expression) || !hasPower);
return expression;
}
}
Loading…
Cancel
Save