线程中的异常 - 用户输入

时间:2015-03-17 13:20:59

标签: java

我非常需要帮助。我有一个名为Fields的类,我希望创建一个Field对象数组,但是当我执行下面的代码时:

static Field[] theField;
static Scanner userInput = new Scanner(System.in);

static void createFields()
{

    System.out.print("Enter the number of fields required: ");
    int numFields = userInput.nextInt();

    theField = new Field[numFields];

    for (int i = 0; i < numFields; i++)
    {

        System.out.print("Enter a name for field " + (i + 1) + ": ");
        String name = userInput.nextLine();

        theField[i].setFieldName(name);

    }

}

然后我在控制台中收到以下输出和错误:

Enter the number of fields required: 3
Enter a name for field 1: Exception in thread "main" java.lang.NullPointerException
    at TestChart.createFields(TestChart.java:44)
    at TestChart.main(TestChart.java:14)

请大家帮忙解决错误。自昨晚以来我一直在努力无济于事。

3 个答案:

答案 0 :(得分:0)

theField = new Field[numFields]只是创建数组但是数组为空,因此theField[i].setFieldName(name);将生成空指针异常。您需要使用Field个对象填充数组。

答案 1 :(得分:0)

您已创建了字段数组(theField = new Field[numFields];),但尚未创建个人Fields。假设您有3个项目,那么您的数组如下:theField = { null, null, null }导致NullPointerException。

所以,加上这个:

if(theField[i] == null)
{
    theField[i] = new Field();
}

在你的for循环中的这一行之前:

theField[i].setFieldName(name);

答案 2 :(得分:0)

因此,虽然您有一个Fields数组,但没有一个Field对象被实例化。放行

Field[i] = new Field();

之前打电话

Field[i].setFieldName();