2017-06-09 4 views
0

Je n'arrive pas à comprendre pourquoi j'obtiens une exception NullPointerException dans mon code. Je suis en train d'écrire un simulateur pour un DFA et je l'ai fait ma classe de type de nœud qui tient mes états comme on le voit ci-dessous,NullPointerException pour mes États dans mon DFA?

import java.util.Map; 


class State{ 
     //fields 
     Map<String,State> nextStates; 

     public State passChar(String putIn){ 
      if(!nextStates.containsKey(putIn)){ 
       return null; 
      } 
      return nextStates.get(putIn); 
     } 

     /** 
     * Add a state that this state connects to. 
     * @param sta the state that this state connects to when 
     * a letter in the alphabet is passed to it. 
     * @param pass the letter that is passed to it. 
     */ 
     public void addNextState(String pass,State sta){ 
      nextStates.put(pass,sta); 
     } 
    } 

J'ai essayé je le principal est dans ma classe de conduite et est en tant que telle ,

//Setting up my Q 
     State q1 = new State(); 
     State q2 = new State(); 
     q1.addNextState("1", q1); //this is where my exception is thrown. 
     q1.addNextState("0", q2); 

Exception in thread "main" java.lang.NullPointerException 
    at State.addNextState(State.java:25) 
    at DFA.main(DFA.java:100) 
+0

Vous n'avez jamais initialisé 'nextStates', donc c'est nul. Lorsque vous essayez d'accéder à sa méthode '.put', NPE. – yshavit

+0

Le problème dans cette ligne de code: nextStates.put (pass, sta); Parce que nextStates n'est pas encore initialisé. Vous devez ajouter 'new HashMap ();' pour être comme cela: Map nextStates = new HashMap (); –

Répondre

0

tu dois initialiser le Map:

Map<String,State> nextStates; 

Où allez-vous le faire? Quelque chose comme ceci:

Map<String,State> nextStates = new HasMap <>(); 

C'est la raison de NullPointerException.