/** * 表达式求值 * * @author sun * */ public class Expression { public static void main(String[] args) { // 定义优先级 Map<Character, Integer> map = new HashMap<Character, Integer>(); map.put('(', 0); map.put('+', 1); map.put('-', 1); map.put('*', 2); map.put('/', 2); Stack<Integer> data = new Stack<Integer>();// 数据栈 Stack<Character> op = new Stack<Character>();// 运算符栈 Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); char[] charArray = s.toCharArray(); for (int i = 0; i < charArray.length; i++) { if (charArray[i] >= '0' && charArray[i] <= '9') { data.push((int) (charArray[i] - '0')); } else if (charArray[i] == '(') { op.push((char) charArray[i]); } else if (charArray[i] == ')') { while (op.peek() != '(') calc(data, op); op.pop(); } else { while (!op.isEmpty() && map.get(charArray[i]) <= map.get(op.peek())) calc(data, op); op.push(charArray[i]); } } while (!op.isEmpty()) calc(data, op); System.out.println(data.pop()); } private static void calc(Stack<Integer> data, Stack<Character> op) { int b = data.pop(); int a = data.pop(); char o = op.pop(); if (o == '-') { data.push(a - b); } if (o == '+') { data.push(a + b); } if (o == '*') { data.push(a * b); } if (o == '/') { if (b != 0) data.push(a / b); else { data.push(0); } } } }