为什么我在这个Infix到Postfix程序代码上得到NullPointerException

时间:2012-09-22 17:25:48

标签: java nullpointerexception postfix-notation

我需要为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();



}

}

2 个答案:

答案 0 :(得分:2)

您永远不会初始化evaluador,您只需声明它。在使用之前将其初始化为适当的值。

答案 1 :(得分:1)

如果evaluador是您未在方法中初始化的全局变量,请确保在使用之前在某处初始化

相关问题