0

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



}

}

4

2 回答 2

2

你从不初始化evaluador,你只声明它。在使用之前将其初始化为适当的值。

于 2012-09-22T17:28:54.180 回答
1

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

于 2012-09-22T17:29:59.687 回答