Код
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
и для последней строки (обратной строки), есть ли лучший способ сделать это? спасибо.