当前位置: 代码迷 >> J2SE >> 分解四则算式(例如:4+5-6)解决思路
  详细解决方案

分解四则算式(例如:4+5-6)解决思路

热度:33   发布时间:2016-04-24 01:14:47.0
分解四则算式(例如:4+5-6)
请贴正则表达式,或可运行的代码。

------解决方案--------------------
手写犯错误了。
Java code
public class SleepTest {    public static void main(String[] args) throws InterruptedException {        String str="34+5-6";        String numbers[] =str.split("[\\+-/\\*]");        String op = str.replaceAll("\\d+","");        char opp[] =op.toCharArray();        for(int i=0;i<numbers.length-1;i++){            switch(opp[i]){                case '+':                    numbers[i+1] = String.valueOf(Integer.parseInt(numbers[i]) + Integer.parseInt(numbers[i+1]));                    break;                case '-':                    numbers[i+1] = String.valueOf(Integer.parseInt(numbers[i])-Integer.parseInt(numbers[i+1]));                    break;            }        }        System.out.print("the answer is:"+numbers[numbers.length-1]);    }}
------解决方案--------------------
4+5-6 这种表达式称为中缀表达式(运算符位于两个操作数的当中,故称为中缀表达式),
这种表达式适合人进行计算不适合计算机计算,因为其中有运算符的优先级别和改变优先级别的括
号。一般先将其转为后缀表达式(即运算符在操作数的后面)。

中缀表达式:4+5-6 转为后缀表达式为:4 5 + 6 -

得到这个后缀表达式后,使用空格将其拆成 String[]

1:初始化空栈;
2:从索引 0 开始遍历 String[]
3:如果为操作数,则将其压入栈中;
4:如果为运算符,将栈中的数弹出两次,后弹出的数与先弹出的数进行运算,将结果再压回栈中;
5:遍历完成;
6:这时栈中应该只有一个元素,将其弹出,这个元素就是计算结果。

原来写的代码,参考一下。仅支持括号、加、减、乘、除、冪、小数点、正负号,暂时还不能对表达式的正确性做出检查。

Java code
public class Test {    public static void main(String[] args) {        String expr = "+5+-5";        Calculator cal = new Calculator();        double d = cal.eval(expr);        System.out.println(d);    }}
  相关解决方案