Как правильно написать функциюvaluPostfix? - PullRequest
0 голосов
/ 18 января 2019

Я новичок в кодировании. Попытка написать функциюvaluPostfix на Java. Я получаю сообщение об ошибке:

несовместимые типы: int нельзя преобразовать в Character stack.push (eval (токен, a, b));

Это для школьного задания, преобразующего инфиксную нотацию в постфикс.

Ниже приведен мой блок кода:

private static int evalPostfix(String postfix){
            char token = ' ';
    int a;
    int b;
    Queue<Character> postfixQ = new Queue<>();
    for (char i : postfix.toCharArray()) {
        postfixQ.enqueue(i);
    }
    Stack<Character> stack = new Stack<>();
    while (!postfixQ.isEmpty()){
        token = postfixQ.dequeue();
        if (isOperand(token)){
            stack.push(token);
        }
        else {
            a = stack.pop();
            b = stack.pop();
            stack.push(eval(token, a, b));
        }
    }
    if(!stack.isEmpty()){
        return stack.pop();
    }
    else {
        System.out.println("Invalid postfix expression");
    }
}

функция принимает постфиксное выражение и оценивает результат.

это моя функция eval:

private static int eval(char op, int a, int b){
    int result = -1;
    if (op == '+'){
        return a + b;
    }
    else if (op == '-'){
        return a - b;
    }
    else if (op == '*'){
        return a * b;
    }
    else if (op == '/'){
        return a / b;
    }
    else if (op == '^')
        return (int)Math.pow(a, b);
    return result;
}

1 Ответ

0 голосов
/ 18 января 2019

Проблема в том, что метод eval возвращает int, и вы пытаетесь поместить результат в Stack<Character>.

Я не совсем уверен, что вы пытаетесь сделать здесь, но это не компилируется, потому что int нельзя напрямую преобразовать в Character.

Вы можете решить проблему компиляции, вставив явное приведение к char

stack.push((char)eval(token, a, b));

, но это преобразует результат eval в значение в диапазоне char, что, вероятно, не то, что вы хотите сделать для значений, которые могут легко находиться за пределами [0..65535 ] диапазон char.

...