尝试将double转换为String时无法解决的变量

时间:2017-11-18 21:40:15

标签: java variables queue calculator

在此之前我为分流码算法编写了一个方法,这里我想创建一个方法,以便我可以评估后缀表达式。我将调用此计算方法,以便我可以在后缀队列中执行它。

public String calculate(Queue post, Stack polish) {

我将队列出列并分成单独的令牌以供阅读

    String token = post.Dequeue();

虽然有一个要阅读的令牌

    while(!(token==null)) {
        if(isOperator(token)) {
            double operand_2 = Double.parseDouble(polish.pop());
            double operand_1 = Double.parseDouble(polish.pop());
            if(token.contains("+")) {
                double result = operand_2 + operand_1;
            }
            else if(token.contains("-")) {
                double convert = operand_2 - operand_1;
            }
            else if(token.contains("/")) {
                double convert = operand_2/operand_1;
            }
            else if(token.contains("*")) {
                double convert = operand_2/operand_1;
            }

当我尝试将“convert”转换为String时,它告诉我转换无法解析为变量

            String result = Double.toString(convert);
            polish.push(result);
        }
        else if(isNumeric(token)){
            polish.push(token);
        }
        String finalVal = polish.pop();
        return finalVal;
    }
}

2 个答案:

答案 0 :(得分:1)

这是一个范围问题。声明变量时,声明将持续到下一个}字符,而不是那些匹配的{字符已经过去的字符。由于您在每个convertif块中声明else if,因此声明会持续到该块的结尾。

您需要做的是在所有double convert;if语句之前声明else,以便声明持续到您需要使用{{1}的位置}。

您可能还想给它一个初始值,例如convert来处理运算符与double convert = 0;if语句中的任何一个都不匹配的情况。否则,您可能会遇到不同的编译错误。

答案 1 :(得分:1)

您尚未在该范围内定义convert。它没有被声明为变量,所以你得到了这个错误。

更改为:

    double convert;
    while(!(token==null)) {
            if(isOperator(token)) {
                double operand_2 = Double.parseDouble(polish.pop());
                double operand_1 = Double.parseDouble(polish.pop());
                if(token.contains("+")) {
                    double result = operand_2 + operand_1;
                }
                else if(token.contains("-")) {
                    convert = operand_2 - operand_1;
                }
                else if(token.contains("/")) {
                    convert = operand_2/operand_1;
                }
                else if(token.contains("*")) {
                    convert = operand_2/operand_1;
                }