dimanche 24 septembre 2017

Throws Class Cast Exception but Prints Correct Value

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