日期:2014-05-20 浏览次数:20714 次
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:这时栈中应该只有一个元素,将其弹出,这个元素就是计算结果。
原来写的代码,参考一下。仅支持括号、加、减、乘、除、冪、小数点、正负号,暂时还不能对表达式的正确性做出检查。
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); } }