2012-09-22 15 views
0

我需要爲Shunting Yard算法編寫Java代碼,我收到一個字符串,然後我開始評估。我得到了Node,Stack,Queue類,它們應該可以正常工作。我的方法balancear是這樣的......爲什麼我在Postfix的這個中綴上得到一個NullPointerException程序代碼

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,你只申報。在使用之前將其初始化爲適當的值。

相關問題