Возвращение массива в Java - PullRequest
1 голос
/ 30 августа 2011

Когда я запускаю этот код,

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


class Posting
{
    String title;
}

public class Test
{
    Posting[] dew()
    {
        Posting[] p = new Posting[100];
        for(int i = 0; i <p.length; i++)
        {
            p[i].title  = "this is " + i;
        }
        return p;
    }

    public static void main(String args[])
    {
        Test t = new Test();
        Posting[] out = t.dew();

        for(int i = 0; i < out.length; i ++)
        {
            System.out.println(out[i].title);
        }
    }
}

Я получаю эту ошибку, запускаю:

Exception in thread "main" java.lang.NullPointerException
    at mistAcademic.javaProject.newsBot.core.Test.dew(Test.java:20)
    at mistAcademic.javaProject.newsBot.core.Test.main(Test.java:29)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)

Не могли бы вы иметь какие-либо идеи?

Ответы [ 5 ]

11 голосов
/ 30 августа 2011

Вы должны инициализировать элемент массива перед установкой полей в нем.

p[i] = new Posting(/* ... */);
// THEN set the fields
p[i].title = /* ... */;
9 голосов
/ 30 августа 2011
Posting[] p = new Posting[100];

Это создаст только сам массив, все записи установлены на null.

Так что вам нужно создать экземпляры и поместить их в массив.

    for( int i = 0; i <p.length ; i++ )
    {
        p[i] = new Posting();    // <=  create instances
        p[i].title  = "this is " + i ;
    }
4 голосов
/ 30 августа 2011

Вы должны начать свои сообщения

Posting[] dew()
    {
        Posting[] p = new Posting[100];

        for( int i = 0; i <p.length ; i++ )
        {
            p[i] = new Posting();
            p[i].title  = "this is " + i ;
        }

        return p ;
    }
1 голос
/ 30 августа 2011

Вам нужно инициализировать каждый объект массива. Добавьте следующие строки перед

p[i] = new Posting();
p[i].title  = "this is " + i ; in the for loop.
0 голосов
/ 30 августа 2011

Делая: Posting[] p = new Posting[100];

создаст массив из 100 нулевых объектов.p [0], p [1], p [2] ..... p [99] = null, поэтому когда вы делаете:

 p[i].title 

, это фактически то же самое, что: null.titleполучить NullPOinterException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...