零点例外......不知道为什么

时间:2015-04-04 03:06:40

标签: java nullpointerexception

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非常相似,但这段代码不起作用。

我尝试更改变量名称等,但无法找到具体原因导致其无效。

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

2 个答案:

答案 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,因为您在输入之前尝试获取它,不确定它在填充数组后是否会起作用