Оценка дерева выражений

У меня есть следующий код для оценки моего дерева выражений. Но проблема в том, что это дает мне неправильный ответ. Я проверил и обнаружил, что когда я кодирую

double left = (double) Character.digit((char) evaluateTree(t.left),
                    10);

левое значение становится равным -1, что я считаю двойным значением «+». Когда я вызываю root.left (который равен '+') и пытаюсь получить его двойное значение с помощью Character.digit(char), он дает мне -1. Поскольку мое дерево похоже на:

//My infix : (2+5)*7 MyPostfix : 25+7*

     *
    / \
   +   7
  / \
 2   5

Метод оценки:

public double evaluateTree(TreeNode t) {

if(root == null)
return 0;
if (Character.isDigit(t.ch))
    return (double)t.ch;
else {
    char c = t.ch;
    double left = (double) Character.digit((char) evaluateTree(t.left),
            10);    
    double right = (double) Character.digit(
            (char) evaluateTree(t.right), 10);

    //checks what to do for operators for example for '+' return left+right
    return evaluate(c, left, right);

}

}

Текущий результат = -7,0

Как решить эту проблему?

public double evaluate(char c, double left, double right) {

        double result = 0;
        switch (c) {
        case '+':
            result = left + right;
            break;
        case '-':
            result = left - right;
            break;
        case '*':
            result = left * right;
            break;
        case '/':
            result = left / right;
            break;
        case '%':
            result = left % right;
            break;
        }
        return result;

    }

person Kaan    schedule 24.03.2015    source источник
comment
Где находится evaluate()?   -  person user207421    schedule 25.03.2015
comment
@EJP добавил оценку.   -  person Kaan    schedule 25.03.2015


Ответы (1)


Не вызывайте Character.digit() по результату evaluateTree(). evaluteTree() и evaluate() возвращают double, а не символ, который нужно превратить в двойной. Это

if (Character.isDigit(t.ch))
    return (double)t.ch;

где вам нужен вызов Character.digit().

person user207421    schedule 25.03.2015