Java中的逆波兰表达式函数如何实现?
发布时间:2023-07-01 10:40:13
逆波兰表达式是一种不使用括号来标识运算顺序的数学表达式表示方法。在逆波兰表达式中,操作符放在操作数之后,因此它也被称为后缀表达式。
在Java中实现逆波兰表达式函数,可以使用栈数据结构来实现。以下是一个简单的实现示例:
1. 创建一个函数,该函数接受一个参数表示逆波兰表达式,并返回计算结果。
public static double evaluate(String expression) {
// 创建一个栈
Stack<Double> stack = new Stack<>();
// 将表达式按照空格分割成数组
String[] tokens = expression.split(" ");
// 遍历表达式的每个元素
for (String token : tokens) {
// 如果是操作符,则从栈中取出操作数进行运算
switch (token) {
case "+":
stack.push(stack.pop() + stack.pop());
break;
case "-":
double operand2 = stack.pop();
double operand1 = stack.pop();
stack.push(operand1 - operand2);
break;
case "*":
stack.push(stack.pop() * stack.pop());
break;
case "/":
double divisor = stack.pop();
double dividend = stack.pop();
stack.push(dividend / divisor);
break;
default:
// 如果是操作数,则将其压入栈中
stack.push(Double.parseDouble(token));
break;
}
}
// 返回栈顶元素作为计算结果
return stack.pop();
}
在此示例中,我们创建了一个栈来存储操作数。我们遍历逆波兰表达式的每个元素,对于操作符,我们从栈中弹出相应数量的操作数进行计算,并将结果压入栈中;对于操作数,我们将其转换为double类型,并将其压入栈中。最后,我们返回栈顶元素作为计算结果。
以下是使用示例:
public static void main(String[] args) {
String expression = "5 2 + 4 * 7 -";
double result = evaluate(expression);
System.out.println(result); // 输出:25.0
}
在此示例中,我们使用逆波兰表达式"5 2 + 4 * 7 -"来计算结果。首先,将操作数5和2压入栈中,遇到"+"操作符,从栈中弹出5和2进行相加,将结果7压入栈中;然后将操作数4压入栈中,遇到"*"操作符,从栈中弹出7和4进行相乘,将结果28压入栈中;最后,将操作数7压入栈中,遇到"-"操作符,从栈中弹出28和7进行相减,将结果21压入栈中。最终,栈中的 元素21就是计算结果。
通过这种方式,我们可以实现一个简单的逆波兰表达式函数来计算数学表达式的结果。
