ADD file via upload

develop
hnu202326010302 3 days ago
parent b6d5009f4d
commit f47190ba33

@ -0,0 +1,129 @@
// Middleproblem.java
import java.util.Random;
/**
*
*/
public class MiddleSchoolProblemGenerator implements MathProblemGenerator {
private final Random random = new Random();
private static int advancedOperationFlag = 1;
private String userName = "default";
private String timestamp = "default";
private int problemNumber = 1;
public static void main(String[] args) {
for (int index = 0; index < 15; index++) {
advancedOperationFlag = 1;
MiddleSchoolProblemGenerator generator = new MiddleSchoolProblemGenerator();
System.out.println((index + 1) + ". " + generator.generateSmartExpression());
}
}
public void start(int problemCount, String userName) {
this.userName = userName;
TimeManager timeManager = new TimeManager();
timestamp = timeManager.getCurrentTime();
for (int index = 0; index < problemCount; index++) {
advancedOperationFlag = 1;
System.out.println((index + 1) + ". " + generateSmartExpression());
System.out.println();
}
}
@Override
public String generateSmartExpression() {
int operatorCount = random.nextInt(3) + 1;
int advancedOperationTarget = random.nextInt(operatorCount) + 1;
String result;
while (true) {
boolean isDuplicate = false;
result = buildExpression(operatorCount, advancedOperationTarget);
FileManager fileManager = new FileManager();
fileManager.readUserFiles(userName);
for (String line : fileManager.getFileLines()) {
String[] parts = line.split("\\.", 2);
String expression = parts.length > 1 ? parts[1] : line;
if (result.equals(expression)) {
isDuplicate = true;
break;
}
}
if (isDuplicate) {
continue;
}
fileManager.createUserFile(userName, timestamp);
fileManager.writeToFile(userName, timestamp, problemNumber + "." + result);
fileManager.writeToFile(userName, timestamp, " ");
problemNumber++;
break;
}
return result;
}
@Override
public String buildExpression(int operatorCount, int advancedOperationTarget) {
if (operatorCount == 1) {
return generateSimpleExpression(advancedOperationTarget);
}
int splitPoint = random.nextInt(operatorCount - 1) + 1;
String leftPart = (splitPoint > 1 && random.nextBoolean())
? "(" + buildExpression(splitPoint, advancedOperationTarget) + ")"
: buildExpression(splitPoint, advancedOperationTarget);
String rightPart = (operatorCount - splitPoint > 1 && random.nextBoolean())
? "(" + buildExpression(operatorCount - splitPoint, advancedOperationTarget) + ")"
: buildExpression(operatorCount - splitPoint, advancedOperationTarget);
char operator = getRandomOperator("+-*/");
return leftPart + " " + operator + " " + rightPart;
}
@Override
public String generateSimpleExpression(int advancedOperationTarget) {
int firstOperand = random.nextInt(100) + 1;
int secondOperand = random.nextInt(100) + 1;
char operator = getRandomOperator("+-*/√²");
if (advancedOperationFlag == advancedOperationTarget) {
operator = getRandomOperator("√²");
if (operator == '√') {
advancedOperationFlag = 0;
return operator + "" + secondOperand;
} else if (operator == '²') {
advancedOperationFlag = 0;
return firstOperand + "" + operator;
}
} else {
advancedOperationFlag++;
}
if (random.nextInt(2) == 0) {
return firstOperand + "";
}
if (operator == '√') {
return operator + "" + secondOperand;
} else if (operator == '²') {
return firstOperand + "" + operator;
} else {
if (random.nextBoolean()) {
return firstOperand + " " + operator + " " + secondOperand;
} else {
return "(" + firstOperand + " " + operator + " " + secondOperand + ")";
}
}
}
@Override
public char getRandomOperator(String operators) {
return operators.charAt(random.nextInt(operators.length()));
}
}
Loading…
Cancel
Save