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.
63 lines
2.0 KiB
63 lines
2.0 KiB
package model;
|
|
|
|
public class HighMaker extends Student {
|
|
final static String[] binaryOps = {"+", "-", "*", "/"}; // 操作符
|
|
final static String[] trigOps = {"sin", "cos", "tan"};
|
|
int operandCount;
|
|
String[] questionParts; // 操作数
|
|
boolean[] specialOpFlags; // 特殊操作符索引序列
|
|
int parenStart;
|
|
int parenEnd;
|
|
|
|
public HighMaker(String name, String password, String path) {
|
|
super(name, password, path);
|
|
}
|
|
|
|
// 数据预处理
|
|
public void getRandom() {
|
|
this.operandCount = random.nextInt(4) + 2;
|
|
this.questionParts = new String[this.operandCount];
|
|
|
|
// 使用基类方法随机决定特殊操作符的数量和位置
|
|
this.specialOpFlags = randomMaker(this.operandCount);
|
|
|
|
// 生成题目各部分
|
|
for (int i = 0; i < operandCount; i++) {
|
|
int operand = random.nextInt(100) + 1;
|
|
if (specialOpFlags[i]) {
|
|
String op = trigOps[random.nextInt(trigOps.length)];
|
|
questionParts[i] = op + "(" + operand + ")";
|
|
} else {
|
|
questionParts[i] = String.valueOf(operand);
|
|
}
|
|
}
|
|
|
|
// 使用基类方法生成有效括号
|
|
int[] parenPos = bracketMaker(this.operandCount);
|
|
this.parenStart = parenPos[0];
|
|
this.parenEnd = parenPos[1];
|
|
}
|
|
|
|
@Override
|
|
protected String makeOneQuestion() {
|
|
getRandom();
|
|
StringBuilder question = new StringBuilder();
|
|
|
|
for (int i = 0; i < operandCount; i++) {
|
|
if (i == parenStart) {
|
|
question.append("(");
|
|
}
|
|
question.append(questionParts[i]);
|
|
if (i == parenEnd) {
|
|
question.append(")");
|
|
}
|
|
|
|
if (i < operandCount - 1) {
|
|
String op = binaryOps[random.nextInt(binaryOps.length)];
|
|
question.append(" ").append(op).append(" ");
|
|
}
|
|
}
|
|
return question.toString();
|
|
}
|
|
|
|
} |