日期:2014-05-20 浏览次数:20885 次
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);
}
}