Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA中的强制转换问题_Java_Casting_Stack_Double - Fatal编程技术网

JAVA中的强制转换问题

JAVA中的强制转换问题,java,casting,stack,double,Java,Casting,Stack,Double,我无法从字符串转换为字符,然后转换为双精度。我试图计算一个简单的表达式1+2,但当我从堆栈中弹出它时,它分别为50.0和49.0。然后添加到99.0。我的代码如下 表达式为“1+2” public static double calculate (String expression){ Stack<Character> calc = new Stack(); expression.replaceAll("\\s+","") ; doub

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

表达式为“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;
    }

问题是当你对这样一个数字进行直接转换时

(double) calc.pop();
…您实际上得到的是字符“1”ascii 49和“2”ascii 50的ascii值

您需要解析该字符。类似这样的方法会奏效:

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

问题是当你对这样一个数字进行直接转换时

(double) calc.pop();
…您实际上得到的是字符“1”ascii 49和“2”ascii 50的ascii值

您需要解析该字符。类似这样的方法会奏效:

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

你的代码只能处理数字0-9。@celticminstrel是的,它只是一个简单的计算器。你的代码只能处理数字0-9。@celticminstrel是的,它只是一个简单的计算器