Casting Error

0

I have a program that works with the Polish inverse notation, which is, when we have an operation ((2 + 3) 8), in Polish notation stands "23 + 8". I have already been able to pass the operation to the Polish notation, however, I am not able to perform the operation because of a casting error, due to the function that causes the notation to return a String. Here is the code:

Note: the "fits" function only checks if all the open parentheses are closed.

Stack:

public class Pilha {

    public Object[] pilha;
    public int posicaoPilha;

    public Pilha() {
        this.posicaoPilha = -1;
        this.pilha = new Object[1000];
    }

    public boolean isEmpty() {
        if (this.posicaoPilha == -1) {
            return true;
        }
        return false;
    }

    public int size() {
        if (this.isEmpty()) {
            return 0;
        }
        return this.posicaoPilha + 1;
    }

    public Object peek() {
        if (this.isEmpty()) {
            return null;
        }
        return this.pilha[this.posicaoPilha];
    }

    public Object pop() {
        if (isEmpty()) {
            return null;
        }
        return this.pilha[this.posicaoPilha--];
    }

    public void push(Object valor) {
        if (this.posicaoPilha < this.pilha.length - 1) {
            this.pilha[++posicaoPilha] = valor;
        }
    }

    public void imprime() {
        if (isEmpty()) {
            System.out.println("Pilha vazia");
        }

        while (isEmpty() == false) {
            System.out.print(pop() + " ");                    
        }
    }
}

Class containing the Functions:

    public class Exercicio4 {
        boolean encaixa(String palavra) {
            int cont1 = 0, cont2 = 0;
            Pilha pilha = new Pilha();

            for (int i = 0; i < palavra.length(); i++) {
                if(palavra.charAt(i) == '('){
                    char c = palavra.charAt(i);
                    pilha.push(c);
                    cont1++;
                } else if(palavra.charAt(i) == ')' ) {
                    char c = palavra.charAt(i);
                    pilha.push(c);
                    cont2++;
                }
            }

            return cont1 == cont2;
        }

        String notacao(String palavra) {
            Pilha pilha = new Pilha();
            String palavra2 = "";

            for(int i = 0; i < palavra.length(); i++) {
                char c = palavra.charAt(i);
                if(Character.isDigit(c)) {
                    palavra2 = palavra2 + c;
                } else if(c == '+' || c == '-' || c == '*' || c == '/'){
                    pilha.push(c);
                } else if(c == ')') {
                    palavra2 = palavra2 + pilha.pop();
                }          
            }

            return palavra2;
        }

        int solucao(String palavra2) {
            Pilha pilha = new Pilha();
            int resultado = 0;
            for(int i = 0; i < palavra2.length(); i++) {
                char c = palavra2.charAt(i);
                if(Character.isDigit(c)) {
                    pilha.push(c);
                } else if(c == '+') {
                    /*ERRO*/
                    int x = (int)pilha.pop();
                    int y = (int)pilha.pop();
                    resultado = y + x;
                    pilha.push(resultado);
                } else if(c == '-') {
                    int x = (int)pilha.pop();
                    int y = (int)pilha.pop();
                    resultado = y - x;
                    pilha.push(resultado);                
                } else if(c == '*') {
                    int x = (int)pilha.pop();
                    int y = (int)pilha.pop();
                    resultado = y * x;
                    pilha.push(resultado);                
                }  else if(c == '/') {
                    int x = (int)pilha.pop();
                    int y = (int)pilha.pop();
                    resultado = y / x;
                    pilha.push(resultado);                
                }
            }

            return (int)pilha.pop();
        }
    }

TestaPilha:

public class TestaPilha {

    public static void main(String args[]) {
        Exercicio4 ex4 = new Exercicio4();

        String palavra = "((2+3)*8)"; 

        if(ex4.encaixa(palavra)) {
            System.out.println(ex4.notacao(palavra));
            ex4.solucao(ex4.notacao(palavra));
        }

    }
}

Error:

Exception in thread "main" java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.Integer
    at Exercicio4.Exercicio4.solucao(Exercicio4.java:53)
    at Exercicio4.TestaPilha.main(TestaPilha.java:16)
    
asked by anonymous 02.10.2018 / 23:43

1 answer

0

Casting is first passing the Object to String and then to Integer. The code looks like this:

int solucao(String palavra2) {
        Pilha pilha = new Pilha();
        int resultado = 0;
        for(int i = 0; i < palavra2.length(); i++) {
            char c = palavra2.charAt(i);
            if(Character.isDigit(c)) {
                pilha.push(c);
            } else if(c == '+') {
                int x = Integer.parseInt(pilha.pop().toString());                    
                int y = Integer.parseInt(pilha.pop().toString());
                resultado = y + x;
                pilha.push(resultado);
            } else if(c == '-') {
                int x = Integer.parseInt(pilha.pop().toString());
                int y = Integer.parseInt(pilha.pop().toString());
                resultado = y - x;
                pilha.push(resultado);                
            } else if(c == '*') {
                int x = Integer.parseInt(pilha.pop().toString());
                int y = Integer.parseInt(pilha.pop().toString());
                resultado = y * x;
                pilha.push(resultado);                
            }  else if(c == '/') {
                int x = Integer.parseInt(pilha.pop().toString());
                int y = Integer.parseInt(pilha.pop().toString());
                resultado = y / x;
                pilha.push(resultado);                
            }
        }        
        System.out.println(pilha.peek());        
        return (int)pilha.pop();
    }
    
03.10.2018 / 15:47