package me.lzb.basic.expr; import me.lzb.common.utils.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.Stack; /** * Created by LZB on 2017/4/20. */ public class CalUtil { public static void calculate(Stack<String> symbolStack, Stack<Float> numberStack, boolean isRe) { if (symbolStack.isEmpty()) { return; } String symbole = symbolStack.pop(); float right; float left; if (isRe) { left = numberStack.pop(); right = numberStack.pop(); } else { right = numberStack.pop(); left = numberStack.pop(); } float r = calculate(symbole, left, right); numberStack.push(r); } public static float calculate(String symbol, float left, float right) { if ("+".equals(symbol)) { return left + right; } if ("-".equals(symbol)) { return left - right; } if ("*".equals(symbol)) { return left * right; } if ("/".equals(symbol)) { return left / right; } return 0; } public static List<Node> processInfixExpr(String expr) { List<Node> list = new ArrayList<>(); char[] array = expr.toCharArray(); String number = ""; for (int i = 0; i < array.length; i++) { if (Character.isDigit(array[i])) { number = number + String.valueOf(array[i]); } else { if (StringUtils.isNotBlank(number)) { Node num = new Node(Float.valueOf(number), null, -1); number = ""; list.add(num); } int calLevel = 1; if ("*/".indexOf(array[i]) >= 0) { calLevel = 2; } if ("()".indexOf(array[i]) >= 0) { calLevel = 3; } Node sym = new Node(0, String.valueOf(array[i]), calLevel); list.add(sym); } } if (StringUtils.isNotBlank(number)) { Node num = new Node(Float.valueOf(number), null, -1); list.add(num); } return list; } public static boolean isLowLevel(Node stackTop, Node next) { return stackTop.calLevel < next.calLevel; } public static void main(String[] args) { Node n = new Node(0, "*", 2); Node m = new Node(0, "-", 1); System.out.println(isLowLevel(n, m)); } }