java从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:后缀表达式的长度不超过一行,以“$”作为输入结束标志,操作数之间用空格分隔,操作符只可能有+、-、*、/四种。例如:234 34 +2*$。
时间: 2024-10-21 22:02:54 浏览: 35
在Java中,我们可以使用栈数据结构来处理后缀表达式(也称为逆波兰表示法,Reverse Polish Notation,RPN)。这种算法通常被称为后缀表达式求值算法。以下是基本步骤:
1. 创建一个栈(Stack)用于存储操作数。
2. 遍历输入字符串,遇到数字就直接压入栈中。
3. 遇到运算符时,比较栈顶的两个元素(如果存在),看它们是否能构成一个完整的运算,比如是"2 3 +"而不是"2 3 * 5"。如果是,则执行相应的运算并将结果替换这两个数;然后将运算符出栈,继续处理下一个运算符。
4. 当遍历完输入字符串后,栈顶剩下的就是最终的结果。
以下是一个简单的Java函数实现:
```java
import java.util.Stack;
public class RpnCalculator {
public static int evaluate(String postfix) {
Stack<Integer> stack = new Stack<>();
for (String token : postfix.split(" ")) {
if (!token.isEmpty() && !token.equals("$")) {
stack.push(Integer.parseInt(token));
} else if (!stack.isEmpty()) {
int right = stack.pop();
int left = stack.pop();
switch (token) {
case "+":
stack.push(left + right);
break;
case "-":
stack.push(left - right);
break;
case "*":
stack.push(left * right);
break;
case "/":
stack.push(left / right);
break;
}
}
}
return stack.pop(); // 返回结果
}
public static void main(String[] args) {
String input = "2 3 4 + 34 * 2 $";
System.out.println(evaluate(input)); // 输出结果
}
}
```
阅读全文