我需要为 Shutting Yard 算法编写 Java 代码,我收到一个字符串,我将其放入队列并开始评估。我得到了 Node、Stack、Queue 的类,它们应该可以正常工作。我的方法平衡器是这样的......
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();
}
}