переменная не будет читать оператор в очереди - PullRequest
0 голосов
/ 21 марта 2020
Код
private double evaluatePostfix(DSAQueue postFixQueue){
        DSAStack stack = new DSAStack();
        System.out.println("Count: " + postFixQueue.getCount()); 
        for (int i = 0; i < postFixQueue.getCount(); i++){
            char c = (char) postFixQueue.peek();
            System.out.println("c: " + c);
            System.out.println("Peek: " + postFixQueue.peek());
            if(Character.isDigit(c)){
                stack.push(c - '0');
            }

            else{
                int val1 = (int) stack.pop();
                int val2 = (int) stack.pop();
                System.out.println("This is val1: " + val1);
                System.out.println("This is val2: " + val2);
                switch(c){
                    case '+':
                        stack.push(val2+val1);
                    break;

                    case '-':
                        stack.push(val2-val1);
                    break;

                    case '/':
                        stack.push(val2/val1);
                    break;

                    case '*':
                        stack.push(val2*val1);
                    break;
                }
            }
            System.out.println("Stack tostring: " + stack.toString());
            postFixQueue.dequeue();
        }

        return (double) ((Integer) stack.pop()).intValue();
    }

выше - моя попытка оценить постфикс, принимая его из очереди. мой пример (5 * 6), он будет читать 5 и 6, даже хранить его в стеке. но когда дело доходит до оператора '*', он перестает читать и возвращает мне 6.0. любой совет?

результат:

//infix (5*6) to postfix
Pushed: (
Enqueued: 5
Pushed: *  
Enqueued: 6
Popped: *  
Enqueued: *
Popped: (  
5, 6, *

//evaluating postfix
Count: 3
c: 5
Peek: 5
Pushed: 5
Stack tostring: 5
Dequeued: 5
c: 6
Peek: 6
Pushed: 6
Stack tostring: 5, 6
Dequeued: 6
Popped: 6
6.0

и для последней строки (обратной строки), есть ли лучший способ сделать это? спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...