Notação polonesa reversa

Estou tentando criar um código que transforme uma expressão infixa em notação polonesa reversa.
Está dando um erro logo no começo.

package notacaopolonesa;


class pilha{
    int max = 10, topo = 0;
       
    String[] elem = new String[max];
    
    boolean cheia(){
        if( topo == max )return true;
        else return false;
    }
    
    boolean vazia(){
        if( topo == 0 )return true;
        else return false;
    }
    
    //empilha um valor como uma string
    void empilha(String x){
        elem[topo] = x;
        topo = topo + 1;
        
    }
    
    //desempilha a quantidade de elmentos solicitados
    String desempilha(int x){
        return elem[topo];
        topo = topo - x;
    }
    
    void mostrapilha(){
      if(this.vazia()==true) System.out.println("Pilha vazia..");
      else{
        for(int i = topo-1; i >= 0; i--){
            System.out.println(elem[i]);
        }
      }
    }
}
/**
 *
 * @author jubei
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        
        pilha NovaPilha = new pilha();
        String expressao = new String();
        expressao = "(2+2)/2";
        
        for(int i=expressao.length();i<=expressao.length();i--){
            if (expressao.charAt(i)==')'){
                NovaPilha.empilha(expressao.charAt(i));
            }
        }
        
        
    }

}

init:
deps-jar:
Compiling 1 source file to C:\Users\jubei\Documents\NetBeansProjects\NotacaoPolonesa\build\classes
C:\Users\jubei\Documents\NetBeansProjects\NotacaoPolonesa\src\notacaopolonesa\Main.java:34: unreachable statement
        topo = topo - x;
C:\Users\jubei\Documents\NetBeansProjects\NotacaoPolonesa\src\notacaopolonesa\Main.java:35: missing return statement
    }
C:\Users\jubei\Documents\NetBeansProjects\NotacaoPolonesa\src\notacaopolonesa\Main.java:64: empilha(java.lang.String) in notacaopolonesa.pilha cannot be applied to (char)
                NovaPilha.empilha(expressao.charAt(i));
3 errors
CONSTRUÇÃO FALHOU (tempo total: 0 segundos)

Sua última linha do método

     String desempilha(int x){  
         return elem[topo];  
         topo = topo - x;  
     } 

está fora de alcance, pq ele retorna antes de chegar a essa linha. Tente trocar por:

     String desempilha(int x){  
         String retorno = elem[topo];
         topo = topo - x;  
         return retorno;
     } 

Outra coisa. Isso:

  boolean cheia(){  
         if( topo == max )return true;  
         else return false;  
  }

pode ser trocado por isso:

  boolean cheia(){  
         return ( topo == max );  
  }

EDITADO: No outro erro, no teu laço for deve ser trocado por isso:

NovaPilha.empilha(String.valueOf(expressao.charAt(i))); 

De qualquer forma, ainda dá erro na execução. Limites da String. Tem que dar uma revisada nesse código.

Abraços

Aproveitando que o BD aqui caiu, consegui consertar, mas a lógica estava estranha. Os limites do for estavam errados e quando consertei só imprimiu um “)”. Não me dei ao trabalho de pesquisar sobre essas notações, mas mudei a lógica. Roda aí e vê se é essa a saída que você estava esperando:

 class Pilha{  
     int max = 10, topo = 0;  
          
     String[] elem = new String[max];  
       
     boolean cheia(){  
         return( topo == max );  
     }  
       
     boolean vazia(){  
         return ( topo == 0 );  
     }  
       
     //empilha um valor como uma string  
     void empilha(String x){  
         elem[topo] = x;  
         topo = topo + 1;  
     }  
       
     //desempilha a quantidade de elmentos solicitados  
     String desempilha(int x){
    	 String retorno = elem[topo]; 
         topo = topo - x;
         return retorno;
     }  
       
     void mostrapilha(){  
       if(this.vazia()){
    	   System.out.println("Pilha vazia..");  
       }else{  
         for(int i = topo-1; i >= 0; i--){  
             System.out.println(elem[i]);  
         }  
       }  
     }  
 }  
 /** 
 * 
 * @author jubei 
 */  
 public class Main {  
   
     /** 
      * @param args the command line arguments 
      */  
     public static void main(String[] args) {  
           
         Pilha novaPilha = new Pilha();  
         String expressao = new String();  
         expressao = "(2+2)/2";  
           
         for(int i = expressao.length() - 1; i >= 0; i--){  
             if ((expressao.charAt(i) != ')') && (expressao.charAt(i) != '(')){  
                 novaPilha.empilha(String.valueOf(expressao.charAt(i)));  
             }  
         }
         novaPilha.mostrapilha();
           
     }  
 } 

Abraços.

De uma olhada neste codigo que tive que fazer um dia

Notação infixada: (((2+2)/4)*2)

Notação posfixada: 22+4/2*

site:

http://www.faculdadepuc.xpg.com.br/expressaomatematica