我需要为Shunting 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();
}
}
答案 0 :(得分:2)
您永远不会初始化evaluador
,您只需声明它。在使用之前将其初始化为适当的值。
答案 1 :(得分:1)
如果evaluador
是您未在方法中初始化的全局变量,请确保在使用之前在某处初始化