我需要爲Shunting Yard算法編寫Java代碼,我收到一個字符串,然後我開始評估。我得到了Node,Stack,Queue類,它們應該可以正常工作。我的方法balancear是這樣的......爲什麼我在Postfix的這個中綴上得到一個NullPointerException程序代碼
public boolean balancear (Cola infijo) {
balance=infijo;
int balanceado=0;
char parentesis;
while (!balance.isEmpty()) {
parentesis=balance.pop();
if (parentesis=='(')
balanceado++;
else if (parentesis==')')
balanceado--;
}
return balanceado==0;
}
package expresionpolaca;
public class Postfijo {
Pila operadores = new Pila();
Cola infijo = new Cola();
Cola postfijo = new Cola();
Herramientas evaluador;
StringBuilder salida = new StringBuilder();
int re;
public Postfijo (String expresion) {
for (int i = 0; i < expresion.length() ; i++) {
infijo.push(expresion.charAt(i));
}
}
public String Convertir() {
evaluador.balancear(infijo); // I get NullPointerException Right HERE
if (evaluador.balancear(infijo)) { // I get NullPointerException Right HERE
while (!infijo.isEmpty()) {
char tmp=infijo.pop();
if (Character.isLetterOrDigit(tmp)) {
postfijo.push(tmp);
}
else {
switch (tmp) {
case '(':
operadores.push(tmp);
break;
case ')':
do {
tmp=operadores.pop();
if (tmp!='(') postfijo.push(tmp);
} while(tmp!='(');
operadores.pop();
break;
default:
if (operadores.sneak()=='(') operadores.push(tmp);
else while (evaluador.prioridad(tmp)>evaluador.prioridad(operadores.sneak())||operadores.sneak()!='('||operadores.isEmpty()==false) {
postfijo.push(operadores.pop());
}
break;
}
}
}
while (!operadores.isEmpty()) postfijo.push(operadores.pop());
}
else return "No balanceada";
while (!postfijo.isEmpty()) {
salida.append(postfijo.pop());
}
return salida.toString();
}
}