1 package data.struct.algorithm;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6
7 class Stackfix2 {
8 private int maxSize;
9 private int stackArr[];
10 private int top;
11
12 public Stackfix2(int maxSize) {
13 this.maxSize = maxSize;
14 stackArr = new int[maxSize];
15 top = -1;
16 }
17
18 // 进栈
19 public void push(int value) {
20 stackArr[++top] = value;
21 }
22
23 // 出栈
24 public int pop() {
25 return stackArr[top--];
26 }
27
28 // 显示栈顶元素
29 public int peek() {
30 return stackArr[top];
31 }
32
33 // 判断栈是否为空
34 public boolean isEmpty() {
35 return top == -1;
36 }
37
38 public boolean isFull() {
39 return top == maxSize - 1;
40 }
41 }
42
43 class Postfix {
44 private Stackfix2 theStackfix2;
45 private String input;
46
47 public Postfix(String in) {
48 input = in;
49 }
50
51 public int doCalculate() {
52 int num1;
53 int num2;
54 int inresult;
55 char ch;
56 int j;
57 theStackfix2 = new Stackfix2(20);
58 for (j = 0; j < input.length(); j++) {
59 ch = input.charAt(j);
60 // 如果字符为整数,则进行类型强制转换,并压入栈中
61 if (ch >= '0' && ch <= '9') {
62 theStackfix2.push((int) (ch - '0'));
63 } else {
64 // 测试用例最最关键的位置,考虑计算过程中的操作数的位置
65 // 先弹出栈的元素是第二个操作数,后弹出栈的是第一个操作数
66 num2 = theStackfix2.pop();
67 num1 = theStackfix2.pop();
68 switch (ch) {
69 case '+':
70 inresult = num1 + num2;
71 break;
72 case '-':
73 inresult = num1 - num2;
74 break;
75 case '*':
76 inresult = num1 * num2;
77 break;
78 case '/':
79 inresult = num1 / num2;
80 break;
81 default:
82 inresult = 0;
83 break;
84 }
85 theStackfix2.push(inresult);
86 }
87 }
88 return theStackfix2.pop();
89 }
90 }
91
92 public class PostfixValue {
93
94 /**
95 * @param args
96 * @throws IOException
97 */
98 public static void main(String[] args) throws IOException {
99
100 while (true) {
101 System.out.println("Enter a Postfix:");
102 System.out.flush();
103 String input;
104 int result;
105 input = getString();
106 Postfix parse = new Postfix(input);
107 result = parse.doCalculate();
108 System.out.println("Postfix求值的结果是:" + result);
109 }
110 }
111
112 public static String getString() throws IOException {
113 InputStreamReader isr = new InputStreamReader(System.in);
114 BufferedReader bufr = new BufferedReader(isr);
115 return bufr.readLine();
116 }
117
118 }