parent
a0a7968925
commit
28b0d64598
@ -1,44 +1,29 @@
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* 生成小学题目
|
||||
*/
|
||||
public class PrimaryProblem implements ProblemsGenerator {
|
||||
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
|
||||
public String generate() {
|
||||
int count = RANDOM.nextInt(4) + 2;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String expression;
|
||||
do {
|
||||
int numCount = 2 + RANDOM.nextInt(4);
|
||||
expression = expressionBuilder.generateBasicExpression(numCount);
|
||||
|
||||
boolean addParentheses = count >= 3 && RANDOM.nextDouble() < 0.5;
|
||||
if (addParentheses) {
|
||||
int parenCount = RANDOM.nextInt(count - 2) + 2;
|
||||
int startPos = RANDOM.nextInt(count - parenCount + 1);
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
if (i == startPos) {
|
||||
sb.append("( ");
|
||||
List<Integer> numPositions = expressionBuilder.getNumberPositions(expression);
|
||||
int pairs = bracketManager.decideParenthesesPairs(numCount);
|
||||
if (pairs > 0) {
|
||||
expression = bracketManager.addParentheses(expression, pairs, numPositions);
|
||||
}
|
||||
|
||||
int num = RANDOM.nextInt(100) + 1;
|
||||
sb.append(num);
|
||||
|
||||
if (i == startPos + parenCount - 1) {
|
||||
sb.append(" )");
|
||||
}
|
||||
} while (expressionBuilder.hasDivideByZero(expression));
|
||||
|
||||
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();
|
||||
return expression;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue