文本表达式计算之后缀表达式构造

来源:互联网 发布:zfs linux 编辑:程序博客网 时间:2024/05/16 18:41
import java.util.ArrayList;import java.util.List;import com.potato.calculate.utils.SimpleUtils;public class BBB {public static void main(String[] args) {List<String> list_a = new ArrayList<String>();List<String> list_b = new ArrayList<String>();list_a.add("a");list_a.add("*");list_a.add("b");list_a.add("+");list_a.add("c");list_a.add("+");list_a.add("d");list_a.add("/");list_a.add("e");// -----------------------------------------------------------------SimpleUtils simpleUtils = new SimpleUtils();list_b.add(list_a.get(0));int _pre = 0;int _after = 0;for (int i = 1; i < list_a.size(); i = i + 2) {_pre = simpleUtils.getPriority(list_a.get(i).charAt(0));if (i + 2 < list_a.size()) {_after = simpleUtils.getPriority(list_a.get(i + 2).charAt(0));} else {list_b.add(list_a.get(list_a.size() - 1));list_b.add(list_a.get(list_a.size() - 2));break;}if (_pre >= _after) {list_b.add(list_a.get(i + 1));list_b.add(list_a.get(i));} else {list_b.add(list_a.get(i + 1));list_b.add(list_a.get(i + 3));list_b.add(list_a.get(i + 2));int goto_value = 0;for (int j = i + 2; j < list_a.size(); j = j + 2) {goto_value = j;int _tmp = 0;if (j + 2 < list_a.size()) {_tmp = simpleUtils.getPriority(list_a.get(j + 2).charAt(0));}if (_pre < _tmp) {list_b.add(list_a.get(j + 3));list_b.add(list_a.get(j + 2));} else {list_b.add(list_a.get(i));break;}}i = goto_value;}}// -----------------------------------------------------------------for (int i = 0; i < list_b.size(); i++) {System.out.print(list_b.get(i));}}}<pre name="code" class="java">public class SimpleUtils {public static final String mul = "*";public static final String div = "/";public static final String add = "+";public static final String sub = "-";public static final String rem = "%";public int getPriority(char simple) {int result = 0;switch (simple) {case '*':result = 2;break;case '/':result = 2;break;case '+':result = 1;break;case '-':result = 1;break;default:result = 0;}return result;}}

 

0 0