Update PrimaryProblem.java

pull/3/head
hnu202326010305 1 month ago
parent a0a7968925
commit 28b0d64598

@ -1,44 +1,29 @@
import java.util.List;
import java.util.Random; import java.util.Random;
/**
*
*/
public class PrimaryProblem implements ProblemsGenerator { public class PrimaryProblem implements ProblemsGenerator {
private static final Random RANDOM = new Random(); private static final Random RANDOM = new Random();
private static final String[] OPERATORS = {"+", "-", "*", "/"}; private final BracketManager bracketManager = new BracketManager();
private final ExpressionBuilder expressionBuilder = new ExpressionBuilder();
@Override @Override
public String generate() { public String generate() {
int count = RANDOM.nextInt(4) + 2; String expression;
StringBuilder sb = new StringBuilder(); do {
int numCount = 2 + RANDOM.nextInt(4);
boolean addParentheses = count >= 3 && RANDOM.nextDouble() < 0.5; expression = expressionBuilder.generateBasicExpression(numCount);
if (addParentheses) {
int parenCount = RANDOM.nextInt(count - 2) + 2; List<Integer> numPositions = expressionBuilder.getNumberPositions(expression);
int startPos = RANDOM.nextInt(count - parenCount + 1); int pairs = bracketManager.decideParenthesesPairs(numCount);
if (pairs > 0) {
for (int i = 0; i < count; i++) { expression = bracketManager.addParentheses(expression, pairs, numPositions);
if (i == startPos) {
sb.append("( ");
}
int num = RANDOM.nextInt(100) + 1;
sb.append(num);
if (i == startPos + parenCount - 1) {
sb.append(" )");
}
if (i < count - 1) {
sb.append(" ").append(OPERATORS[RANDOM.nextInt(OPERATORS.length)]).append(" ");
}
}
} else {
for (int i = 0; i < count; i++) {
int num = RANDOM.nextInt(100) + 1;
sb.append(num);
if (i < count - 1) {
sb.append(" ").append(OPERATORS[RANDOM.nextInt(OPERATORS.length)]).append(" ");
}
} }
}
return sb.toString(); } while (expressionBuilder.hasDivideByZero(expression));
return expression;
} }
} }

Loading…
Cancel
Save