编写一段程序EvaluatePostfix,从标准输入中得到一个后序表达式,求值并打印结果。
后序表达式求解起来比较简单,读到数放入堆栈中,读到运算符,从堆栈中取数字进行运算,然后将结果放回堆栈。最后堆栈中只有一个元素,就是表达式的值。
代码:
import java.util.Scanner;
import java.util.Stack;
public class Q100311 {
private static int evaluatePostfix(String s)
{
String[] params = s.split(" ");
Stack<Integer> stack = new Stack<Integer>();
for (String param : params) {
if (param.equals("+")) {
int d2 = stack.pop();
int d1 = stack.pop();
stack.push(d1 + d2);
} else if (param.equals("-")) {
int d2 = stack.pop();
int d1 = stack.pop();
stack.push(d1 - d2);
} else if (param.equals("*")) {
int d2 = stack.pop();
int d1 = stack.pop();
stack.push(d1 * d2);
} else if (param.equals("/")) {
int d2 = stack.pop();
int d1 = stack.pop();
stack.push(d1 / d2);
} else { // number
stack.push(Integer.parseInt(param));
}
}
return stack.pop();
}
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
System.out.println(evaluatePostfix(scanner.nextLine()));
}
scanner.close();
}
}
结果:
1 2 3 4 5 * + 6 * * +
277