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(); }