publicstaticdoublecompute(String str) { double num[] = newdouble[20]; intflag=0, begin = 0, end = 0, now; now = -1; Stack<Character> st = newStack<Character>(); for (inti=0; i < str.length(); i++) { chars= str.charAt(i); if (s == ' ') {
} elseif (s == '+' || s == '*') { if (flag == 1) { now += 1; if (end < begin) { num[now] = Integer.valueOf(str.substring(begin, begin + 1)); } else { num[now] = Integer.valueOf(str.substring(begin, end + 1)); } flag = 0; } if (s == '-') { if (i == 0) { flag = 1; begin = 0; } elseif (str.charAt(i - 1) == '(' || str.charAt(i - 1) == '*' || str.charAt(i - 1) == '/') { flag = 1; begin = i; } else { if (st.empty()) { st.push(s); } elseif (s == ')') { num[now - 1] = compute(num[now - 1], num[now], st.pop()); now -= 1; st.pop(); } elseif (s == '(') { st.push(s); } elseif (priority(s) <= priority(st.peek())) { num[now - 1] = compute(num[now - 1], num[now], st.pop()); now -= 1; st.push(s); } else { st.push(s); } } } elseif (st.empty()) { st.push(s); } elseif (s == ')') { num[now - 1] = compute(num[now - 1], num[now], st.pop()); now -= 1; st.pop(); } elseif (s == '(') { st.push(s); } elseif (priority(s) <= priority(st.peek())) { num[now - 1] = compute(num[now - 1], num[now], st.pop()); now -= 1; st.push(s); } else { st.push(s); }
} elseif (flag == 0) { flag = 1; begin = i; } else { end = i; }
} if (flag == 1) { now += 1; if (end < begin) { num[now] = Integer.valueOf(str.substring(begin, begin + 1)); } else { num[now] = Integer.valueOf(str.substring(begin, end + 1)); } } while (now > 0) { num[now - 1] = compute(num[now - 1], num[now], st.pop()); now -= 1; } return num[0]; } }