2012-09-22 1 views
0

Мне нужно написать код Java для алгоритма Shunting Yard, я получаю строку, которую я беру в очередь, и начинаю оценку. Я получил классы для Node, Stack, Queue, которые должны работать нормально. Мой метод balancear это ...Почему я получаю исключение NullPointerException в этом программном коде Infix to Postfix

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(); 



} 

}

ответ

1

Если evaluador является глобальной переменной, которую вы не инициализируете в своем методе, убедитесь, что она инициализирована где-то перед ее использованием.

2

Вы никогда не инициализировать evaluador, вы только объявить. Инициализируйте его до соответствующего значения, прежде чем использовать его.

 Смежные вопросы

  • Нет связанных вопросов^_^