Хорошо, мы знаем, что это домашнее задание.Давайте сделаем это вместо того, чтобы сказать вам ответ, давайте попробуем проработать его самостоятельно.Если вы видите исключение NullPointerException (NPE).Возьмите вторую строку исключения:
java.lang.NullPointerException: null
at com.blah.blah.SomeObject.someMethod(SomeArgumentType):1234 <<< here
....
Это 1234 - номер строки в файле, который содержит SomeObject.Если вы перейдете на этот номер строки, вы сможете точно определить, откуда генерируется NPE.Например, если строка 1234 была:
this.foo = bar.indexOf("caramel");
Вы можете легко определить, что было нулем.Понятия не имею?Ну, this никогда не может быть нулевым, поэтому this.foo не проблема.Если this может быть нулевым, вы не можете быть внутри этого метода, потому что this указывает на экземпляр, в котором вы находитесь в данный момент.Следовательно, единственным другим оператором, где переменная разыменовывается, является bar, поэтому bar должно быть нулевым.Давайте посмотрим на ваш код:
temp = new DFA_State(curr_state.nextState(arr1[i]));
Скажем, вы обнаружили, что строка выше вызывает исключение.Ну, может быть несколько вещей, которые могут быть нулевыми.curr_state может быть нулевым, или arr1 может быть нулевым, и в этом случае эта строка будет взорвана.Однако, если arr1 [i] равен null или curr_state.nextState () возвращает null, вы не увидите, что NPE указывает на эту строку, но будет выходить из конструктора, если кто-то попытается вызвать методы для этого параметра метода.
Надеемся, что это даст вам инструменты, необходимые для отслеживания проблем в вашем приложении, благодаря пониманию трассировки стека исключений.