2015-07-12 129 views
1

我无法从字符串转换为字符然后转换为double。我试图计算一个简单的表达式1 + 2,但是当我从堆栈中分别弹出它的50.0和49.0。然后添加到99.0。我的代码如下。在JAVA中铸造问题

的表达是“1 + 2”

public static double calculate (String expression){ 
     Stack<Character> calc = new Stack(); 
     expression.replaceAll("\\s+","") ; 
     double result = 0; 

     for(int i = 0; i < expression.length(); i++){ 
      calc.push((char) expression.charAt(i)); 
     } 

     double one = (double) calc.pop(); 
     char expr = calc.pop(); 
     double two = (double) calc.pop(); 


     if(expr == '-'){ 
      result = one - (1*two); 
     } else if (expr == '+'){ 
      result = one + (1*two); 
     } 

     System.out.println(result); 
     return result; 
    } 
+0

您的代码将只能使用数字0-9。 – celticminstrel

+0

@celticminstrel是它只是一个简单的计算器 – th3r1singking

回答

7

的问题是,当你做一个直接投给了一些类似这样的

(double) calc.pop(); 

...你实际上得到字符的ASCII'1'(ASCII 49)和'2'(ascii 50)。

您需要解析字符。像这样的东西将工作:

Double.parseDouble(calc.pop().toString());