Writing code for reverse polish notation calculator using queues, it says that "operationNode cannot be cast to numberNode" in the first line after the first else if statement. However, when I print the value of n1 and n2, they give the correct doubles that are supposed to be at that position in the queue.
Queue calc = new Queue();
while(!queue.isEmpty()){
Node tempo = queue.dequeue();
if (tempo instanceof numberNode) {
calc.enqueue((numberNode) tempo);
}
else if (tempo instanceof operationNode) {
n1 = (numberNode) calc.dequeue();
n2 = (numberNode) calc.dequeue();
operator = (operationNode) tempo;
if (operator.equals(pls)) queue.enqueue(new numberNode(n1.value + n2.value));
else if (operator.equals(mul)) queue.enqueue(new numberNode(n1.value * n2.value));
else if (operator.equals(min)) queue.enqueue(new numberNode(n1.value - n2.value));
else if (operator.equals(exp)) queue.enqueue(new numberNode(Math.pow((n1.value), (n2.value))));
else if (operator.equals(div)) queue.enqueue(new numberNode(n1.value / n2.value));
else if (operator.equals(mod)) queue.enqueue(new numberNode(n1.value % n2.value));
}
else System.out.println("wrong pattern");
Aucun commentaire:
Enregistrer un commentaire