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);
}
}
}
答案 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);
}
}