//これは、プログラムがスローする例外です
プログラムは正常にコンパイルされず、EmptyCollectionException がスローされます。
スレッド「メイン」の例外 EmptyCollectionException: スタック アンダーフロー。
at ArrayStack.peek(ArrayStack.java:57) at Convertidor.convierte(Convertidor.java:58) at postfix.main(postfix.java:20)
Java 結果: 1
public class Convertidor {
//This method will calculate the priority of the operators.
public int prioridad(char e){
int p, prioridad;
char ch;
prioridad=0;
char[] operadores = new char[] { '+', '-', '*', '/','^' };
for(p=0;p<operadores.length;p++){
ch=operadores[p];
if(p=='+'||p=='-')
prioridad=1;
if(p=='/'||p=='*')
prioridad=2;
if(p=='^')
prioridad=3;
}
return prioridad;
}
public String convierte(String entrada){
String salida="";
String resp;
char e,r,ch;
String n;
n="";
int i, pri,p;
pri=0;
StringBuffer buff=new StringBuffer();
ArrayStack<Character> pila=new ArrayStack<Character>();
while(!entrada.equals(null)){
for(i=0;i<entrada.length();i++){
e=entrada.charAt(i);
if(Character.isDigit(e)){
buff.append(salida);
buff.append(e);
}
else
if(e=='(')
pila.push(e);
else
if(e==')'){
while(!pila.isEmpty()&&!pila.peek().equals('(')){
n=pila.pop().toString();
buff.append(n);
buff.append("");
}
}
if(e=='+'||e=='-'||e=='*'||e=='/'||e=='^'){
while(prioridad(pila.peek())>=prioridad(e)&&!pila.isEmpty()){
buff.append(pila.pop());
}
pila.push(e);
}
}
while(!pila.isEmpty()){
buff.append(pila.pop());
}
}
salida=buff.toString();
return salida;
}
}