空点异常...不知道为什么


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,我在代码中标记为"THIS PART"。

对我来说,这种方法似乎与通过外部节点类创建 ADT 非常相似,但此代码不起作用。

我尝试更改变量名称等,但找不到这不起作用的具体原因。

有人有一些明智的建议吗?

如果您使用调试器,您将看到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.");
    }

首先,你的数组是初始化的,但为空。其次,您是否正在尝试将输入直接输入到数组的表达式中?

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

你试过这个吗?

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

发生这种情况是因为state[i].link0正在尝试访问数组中的值,但该值为 null,因为您尝试在进行输入之前获取它,不确定它在填充数组后是否有效。

最新更新