在Java中返回数组

时间:2011-08-30 05:53:17

标签: java nullpointerexception

当我运行此代码时,

/*
 * 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 个答案:

答案 0 :(得分:11)

在设置数组之前,必须先初始化数组元素。

p[i] = new Posting(/* ... */);
// THEN set the fields
p[i].title = /* ... */;

答案 1 :(得分:9)

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 ;
    }

答案 2 :(得分:4)

你必须初始化你的帖子

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 ;
    }

答案 3 :(得分:1)

您需要初始化数组的每个对象。在

之前添加以下行
p[i] = new Posting();
p[i].title  = "this is " + i ; in the for loop.

答案 4 :(得分:0)

通过执行:Posting[] p = new Posting[100];

将创建一个包含100个空对象的数组。 p [0],p [1],p [2] ..... p [99] = null 所以当你这样做时:

 p[i].title 

它实际上与:null.title相同 因此你得到NullPOinterException。