首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2012-04-26 
分解四则算式(例如:4+5-6)请贴正则表达式,或可运行的代码。[解决办法]手写犯错误了。Java codepublic class

分解四则算式(例如: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);    }} 

热点排行