Já vi muita gente apaiando com esse problema, se tiver alguém que resolva agradeço muito meu codigo não executa corretamente.
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 elementos solicitados
String desempilha(int x){
String retorno = elem[topo];
topo = topo - x;
return retorno;
}
void mostrapilha(){
if(this.vazia()==true) System.out.println("Pilha vazia..");
else{
for(int i = topo-1; i >= 0; i--){
System.out.print(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();
String resultado = new String();
expressao = "(2+2)/2";
NovaPilha.mostrapilha();
for(int i = 0;i<expressao.length();i++){
switch(expressao.charAt(i)){
case ')':{
NovaPilha.desempilha(1);
break;
}
case '+':{
NovaPilha.empilha(String.valueOf(expressao.charAt(i)));
break;
}
case '-':{
NovaPilha.empilha(String.valueOf(expressao.charAt(i)));
break;
}
case '*':{
NovaPilha.empilha(String.valueOf(expressao.charAt(i)));
break;
}
case '/':{
NovaPilha.empilha(String.valueOf(expressao.charAt(i)));
break;
}
default: {
if (expressao.charAt(i)!='('){
resultado = resultado + expressao.charAt(i);
break;
}
}
}
}
while(!NovaPilha.vazia()){
resultado = resultado + NovaPilha.desempilha(1);
}
NovaPilha.mostrapilha();
System.out.println(resultado);
}
}