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.
Partner_Project/src/model/Student.java

62 lines
1.7 KiB

package model;
import java.util.Random;
public abstract class Student {
protected String name;
protected String password;
protected String path;
protected Random random;
public Student(String name, String password, String path) {
this.name = name;
this.password = password;
this.path = path;
this.random = new Random();
}
/**
* 生成有效的括号位置
* 确保括号不会包围整个表达式
*
* @param operands 操作数数量
* @return 包含起始和结束位置的数组 [parenStart, parenEnd]
*/
protected int[] bracketMaker(int operands) {
boolean useParen = operands > 2 && random.nextBoolean();
int parenStart = 0;
int parenEnd = operands - 1;
while (parenStart == 0 && parenEnd == operands - 1) {
parenStart = useParen ? random.nextInt(operands - 1) : -2;
parenEnd = useParen ? random.nextInt(operands - 1 - parenStart) + parenStart + 1 : -2;
}
return new int[]{parenStart, parenEnd};
}
/**
* 随机选择特殊操作符的位置
*
* @param operands 操作数数量
* @return 标记特殊操作符位置的布尔数组
*/
protected boolean[] randomMaker(int operands) {
int specialNumber = Math.min(operands, random.nextInt(operands) + 1);
boolean[] specialOpFlags = new boolean[operands];
for (int i = 0; i < specialNumber; i++) {
int pos;
do {
pos = random.nextInt(operands);
} while (specialOpFlags[pos]);
specialOpFlags[pos] = true;
}
return specialOpFlags;
}
protected abstract String makeOneQuestion();
}