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。
但是我继续得到NullPointException,我标记为&#34;本部分&#34;在代码中。
对我来说,这种方法看起来与通过外部节点类创建ADT非常相似,但这段代码不起作用。
我尝试更改变量名称等,但无法找到具体原因导致其无效。
有人提出一些明智的建议吗?
答案 0 :(得分: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.");
}
答案 1 :(得分:0)
首先,您的数组已初始化但为空。 第二,你是否试图直接输入数组的表达式?
state[i].link0=state[s.nextInt()];//THIS PART
你试过这个吗?
int headedTo = s.nextInt();
state[i].link0=state[headedTo];
这是因为state[i].link0
正在尝试访问数组中的值,但该值为null,因为您在输入之前尝试获取它,不确定它在填充数组后是否会起作用