package mathpuzzle.service; import static mathpuzzle.service.PrimarySchoolGenerator.isNumeric; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Stack; /** * 小学数学表达式计算器,用于计算小学级别的数学表达式。 * *
该类使用双栈算法实现中缀表达式的计算,支持加减乘除四则运算和括号。
* 运算符优先级:乘除高于加减,括号具有最高优先级。
*
* @author 杨博文
* @version 1.0
* @since 2025
*/
public class CaculatePrimary {
/** 数字栈,用于存储操作数。 */
private final Stack 该方法使用双栈算法计算表达式的值,支持四则运算和括号。
*
* @param expression 表达式元素列表,包含数字、运算符和括号
* @return 表达式的计算结果
*/
public double caculate(List 从数字栈中弹出两个操作数,从操作符栈中弹出一个运算符,
* 执行相应的运算,并将结果压入数字栈。
*/
public void doCaculte() {
String op = opStack.pop();
double num2 = numStack.pop();
double num1 = numStack.pop();
switch (op) {
case "+":
numStack.push(num1 + num2);
break;
case "-":
numStack.push(num1 - num2);
break;
case "*":
numStack.push(num1 * num2);
break;
case "/":
numStack.push(num1 / num2);
break;
default:
break;
}
}
}