|
|
|
|
@ -0,0 +1,80 @@
|
|
|
|
|
// AbstractQuestionSeting.java
|
|
|
|
|
package com.example.myapp.service;
|
|
|
|
|
|
|
|
|
|
import com.example.myapp.model.Expression;
|
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
|
|
|
|
public abstract class AbstractQuestionSeting implements QuestionSeting {
|
|
|
|
|
protected Random rand = new Random();
|
|
|
|
|
|
|
|
|
|
// 只生成整数(1-50)
|
|
|
|
|
protected String getRandomNumber() {
|
|
|
|
|
int num = 1 + rand.nextInt(50);
|
|
|
|
|
return String.valueOf(num);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 生成完全平方数(用于开方运算)
|
|
|
|
|
protected String getPerfectSquare() {
|
|
|
|
|
int base = 1 + rand.nextInt(12); // 1-12的平方
|
|
|
|
|
int square = base * base;
|
|
|
|
|
return String.valueOf(square);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 生成适合开方的数(完全平方数)
|
|
|
|
|
protected String getNumberForSqrt() {
|
|
|
|
|
// 80%概率生成完全平方数,20%概率生成普通数
|
|
|
|
|
//if (rand.nextDouble() < 1) {
|
|
|
|
|
return getPerfectSquare();
|
|
|
|
|
// } else {
|
|
|
|
|
// return getRandomNumber();
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected String getRandomOperator() {
|
|
|
|
|
String[] ops = {"+", "-", "*", "/"};
|
|
|
|
|
return ops[rand.nextInt(ops.length)];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected int getPriority(String op) {
|
|
|
|
|
if (op == null) return 3;
|
|
|
|
|
switch (op) {
|
|
|
|
|
case "+":
|
|
|
|
|
case "-":
|
|
|
|
|
return 1;
|
|
|
|
|
case "*":
|
|
|
|
|
case "/":
|
|
|
|
|
return 2;
|
|
|
|
|
case "²":
|
|
|
|
|
case "√":
|
|
|
|
|
case "sin":
|
|
|
|
|
case "cos":
|
|
|
|
|
case "tan":
|
|
|
|
|
return 3;
|
|
|
|
|
default:
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 解析数字字符串为double
|
|
|
|
|
protected double parseNumber(String numStr) {
|
|
|
|
|
return Double.parseDouble(numStr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 格式化结果为字符串,如果是整数显示整数,小数显示小数
|
|
|
|
|
protected String formatResult(double value) {
|
|
|
|
|
if (value == (int) value) {
|
|
|
|
|
return String.valueOf((int) value);
|
|
|
|
|
} else {
|
|
|
|
|
// 保留2位小数,但去除末尾的0
|
|
|
|
|
String formatted = String.format("%.2f", value);
|
|
|
|
|
if (formatted.endsWith(".00")) {
|
|
|
|
|
return formatted.substring(0, formatted.length() - 3);
|
|
|
|
|
} else if (formatted.endsWith("0")) {
|
|
|
|
|
return formatted.substring(0, formatted.length() - 1);
|
|
|
|
|
}
|
|
|
|
|
return formatted;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public abstract String addParenthesesIfNeeded(Expression child, String parentOp, boolean isRightChild);
|
|
|
|
|
}
|