空指针异常,无法解析

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

标签: java nullpointerexception

public class Bucket

{

    int rows,cols,blocked,open,full;

    public void initialize()
    {
        rows=0;
        cols=0;
        blocked=0;
        System.out.println("You were here");
    }
    public void open()
    {
        blocked=1;
    }
}

当我运行percolation类时,我得到一个空指针异常,我没有任何线索,如何摆脱它,任何帮助都会非常感激。

public class Percolation
{

    //public Percolation(int N)
    public static void main(String args[])throws Exception
    {
        try
        {
            int N=5;
            Bucket[][] barray=new Bucket[N][N];
            for(int i=0;i<N;i++)
            {
                for(int j=0;j<N;j++)
                {
                    barray[i][j].initialize();
                    //barray[i][j].cols=0;  
                    //barray[i][j].blocked=0;           
                }
            }
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }

}

2 个答案:

答案 0 :(得分:2)

使用new运算符创建数组只需分配一个满null秒的数组。在尝试使用它之前,您仍需要单独初始化每个元素:

int N=5;
Bucket[][] barray=new Bucket[N][N];
for(int i=0;i<N;i++)
{
    for(int j=0;j<N;j++)
    {
        barray[i][j] = new Bucket(); // was missing 
        barray[i][j].initialize();
    }
}

但请注意,明确调用initialize方法似乎很奇怪。它会更多&#34; java-ish&#34;将此逻辑移动到Bucket的构造函数,或者至少让构造函数调用initialize本身如果你真的需要这个作为方法:

public class Bucket 
{
    int rows,cols,blocked,open,full;

    public Bucket() {
        initialize();
    }

    public void initialize()
    {
        rows=0;
        cols=0;
        blocked=0;
        System.out.println("You were here");
    }

    public void open()
    {
        blocked=1;
    }

}

然后,当你初始化你的数组时:

int N=5;
Bucket[][] barray=new Bucket[N][N];
for(int i=0;i<N;i++)
{
    for(int j=0;j<N;j++)
    {
        barray[i][j] = new Bucket(); // no need to call initialize()
    }
}

答案 1 :(得分:2)

您创建了一个Bucket个对象的数组。但是,它们没有初始化。

您需要以这种方式创建Bucket的实例:

public static void main(String args[])throws Exception
{
    try
    {
        int N=5;
        Bucket[][] barray=new Bucket[N][N];
        for(int i=0;i<N;i++)
        {
            for(int j=0;j<N;j++)
            {
                barray[i][j] = new Bucket(); // Creating an instance
                barray[i][j].initialize();
                //barray[i][j].cols=0;  
                //barray[i][j].blocked=0;           
            }
        }
    }
    catch(Exception e)
    {
        System.out.println(e);
    }
}