2015-04-04 2 views
0
package default_package; 

import java.util.Scanner; 

public class Main_Class 
{ 
    public static void main(String[] args) 
    { 
     System.out.print("Number of Input NFA States: "); 
     Scanner s=new Scanner(System.in); 
     int numberOfStates=s.nextInt(); 
     State[] state=new State[numberOfStates]; 
     for(int i=0;i<numberOfStates;i++) 
     { 
      System.out.println("state"+i+" Created."); 
     } 
     System.out.println("\nState0 is starting point.\n"); 
     for(int i=0;i<numberOfStates;i++) 
     {/////////0,1 linking/////////// 
      System.out.print("state"+i+"'s 0 is headed to: "); 
      state[i].link0=state[s.nextInt()];//THIS PART 
      System.out.print("state"+i+"'s 1 is headed to: "); 
      state[i].link1=state[s.nextInt()]; 
     } 
     for(int i=0;i<numberOfStates;i++) 
     {////////epsilon linking////////// 
      System.out.print("Number of epsilon move for State"+i+":"); 
      int j=s.nextInt(); 
      if(j>0) 
      { 
       state[i].epsilon(j); 
       for(int i1=0;i1<j;i1++) 
       { 
        System.out.print("State"+i+"'s epsilon move "+i1+": "); 
        state[i].linke[i1]=state[s.nextInt()]; 
       } 
      } 
     } 
     System.out.println("Done"); 
    } 
} 

package default_package; 

public class State 
{ 
    State link0; 
    State link1; 
    State[] linke; 
    public void epsilon(int a) 
    { 
     linke=new State[a]; 
    } 
} 

Как вы можете видеть, я пытаюсь получить NFA и перевести его в DFA.Исключение Null Point ... Не знаю Почему

Но я продолжаю получать NullPointException, где я обозначил как «ЭТО ЧАСТЬ» в коде.

Для меня этот метод кажется таким же, как создание ADT через внешний класс узла, но этот код не работает.

Я попытался изменить имена переменных и т. Д., Но не смог найти конкретную причину, почему это не работает.

Кто-нибудь с некоторыми мудрыми советами?

+1

Используйте отладчик. – MarsAtomic

ответ

0

Прежде всего, ваш массив инициализирован, но пуст. Во-вторых, вы пытаетесь получить вход непосредственно в выражение массива?

state[i].link0=state[s.nextInt()];//THIS PART 

Вы пробовали это?

int headedTo = s.nextInt(); 
state[i].link0=state[headedTo]; 

Это происходит потому, что state[i].link0 пытается получить доступ значение внутри массива, но это значение равно нулю, потому что вы пытаетесь получить его, прежде чем вы можете сделать вход, не уверен, что он будет работать после заполнения массива ,

+0

Благодарим вас за добрый ответ. для второй части, да, я сделал. Я попытался получить значение int отдельно, но это не помогло, поэтому я оставил его как есть. –

1

Если вы использовали отладчик, вы увидите, что state[i] - это null, прежде чем вы его не установили. Вы создали массив ссылок, но вы не указали им ни на что.

Попробуйте добавить

State[] state=new State[numberOfStates]; 
    for(int i=0;i<numberOfStates;i++) 
    { 
     // need to actually create each object, not just print that you did it. 
     state[i] = new State(/* any args needed */); 
     System.out.println("state"+i+" Created."); 
    } 
+0

Благодарим вас за ответ. Не понял, что мне пришлось ссылаться на каждую из них после создания массива. –

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